文件URL處理
使用阿里云視覺智能開放平臺(tái)服務(wù)時(shí),需要傳入文件URL,視覺智能平臺(tái)根據(jù)傳入的文件URL對(duì)文件進(jìn)行智能處理。本文介紹如何處理本地文件或網(wǎng)絡(luò)文件鏈接。
背景信息
阿里云視覺智能開放平臺(tái)服務(wù)的接口響應(yīng)時(shí)間依賴文件的下載時(shí)間,為了保證被檢測文件不會(huì)下載超時(shí),建議您使用阿里云OSS存儲(chǔ)文件。
阿里云視覺智能開放平臺(tái)視覺AI能力API接入、接口使用或問題咨詢等,請通過釘釘群(23109592)加入阿里云視覺智能開放平臺(tái)咨詢?nèi)郝?lián)系我們。
場景一:上海地域OSS文件
創(chuàng)建Bucket選擇區(qū)域時(shí),需要選擇與視覺智能開放平臺(tái)對(duì)應(yīng)服務(wù)能力相同的區(qū)域,當(dāng)前視覺智能開放平臺(tái)各服務(wù)支持的區(qū)域?yàn)?code data-tag="code" code-type="xCode" class="code">華東2(上海)。
說明如果您的OSS所在地域不是華東2(上海),請參見場景二:非上海地域OSS文件進(jìn)行調(diào)用。
上傳本地文件到OSS服務(wù)。
具體操作請參見上傳文件。
查看文件URL。
在已上傳圖片列表中,單擊詳情查看并復(fù)制圖片URL。
場景二:非上海地域OSS文件
對(duì)于非OSS文件,或者您的OSS所屬地域不是華東2(上海),推薦您使用SDK進(jìn)行調(diào)用。
配置環(huán)境變量
配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
阿里云賬號(hào)AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運(yùn)維,具體操作,請參見創(chuàng)建RAM用戶。
請不要將AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號(hào)下所有資源的安全。
Linux和macOS系統(tǒng)配置方法
在IntelliJ IDEA中打開終端Terminal。
執(zhí)行以下命令,配置環(huán)境變量。
<access_key_id>
需替換為您RAM用戶的AccessKey ID,<access_key_secret>
替換為您RAM用戶的AccessKey Secret。如果后續(xù)需要進(jìn)行更多權(quán)限相關(guān)的配置,具體操作請參見使用RAM Policy控制訪問權(quán)限。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
Windows系統(tǒng)配置方法
新建環(huán)境變量文件,添加環(huán)境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并寫入已準(zhǔn)備好的AccessKey ID和AccessKey Secret。然后重啟Windows系統(tǒng)。本操作以Windows 10為例進(jìn)行說明。打開文件資源管理器,在此電腦上右鍵單擊屬性。
在右側(cè)導(dǎo)航欄,單擊高級(jí)系統(tǒng)配置。
在系統(tǒng)屬性對(duì)話框的高級(jí)頁簽下,單擊環(huán)境變量。
在環(huán)境變量對(duì)話框中,單擊新建(W)。
在彈出的新建系統(tǒng)變量對(duì)話框中,添加環(huán)境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并寫入已準(zhǔn)備好的AccessKey ID和AccessKey Secret。重啟Windows系統(tǒng),使配置生效。
方式一(推薦方式)
使用各語言對(duì)應(yīng)的新版SDK,目前新版SDK已經(jīng)支持文件在本地或者非上海地域OSS文件,與文件在同地域的區(qū)別在于,需要使用xxxAdvanceRequest將文件以stream形式通過ImageURLObject參數(shù)(注意:這里的參數(shù)會(huì)隨語言的不同參數(shù)的Object值命名會(huì)有所不同,請參考調(diào)用能力文檔看請求參數(shù)的命名。)傳入進(jìn)行后續(xù)調(diào)用,詳情請參見各語言SDK參考。
方式二
如果您無法使用新版SDK,可使用viapiutils顯式生成URL,以下為各個(gè)語言對(duì)應(yīng)的操作步驟。
該方式使用阿里云視覺智能開放平臺(tái)官方OSS-Bucket作為臨時(shí)存儲(chǔ),僅為方便用戶方便調(diào)試接口使用,文件存儲(chǔ)有效期為1天。該方式非官方推薦方式,不保證SLA,該方式是所有用戶共享總共1萬QPS。如果在高峰時(shí)段,可能會(huì)因?yàn)檫^多用戶使用OSS存儲(chǔ),而導(dǎo)致您調(diào)用接口失敗。所以請勿在生產(chǎn)環(huán)境使用視覺智能開放平臺(tái)官方的OSS-Bucket作為存儲(chǔ)。此上傳接口不推薦付費(fèi)用戶使用。
例如,您購買了某個(gè)API 100QPS的使用服務(wù),但如果仍使用免費(fèi)OSS-Bucket,則仍將與其他用戶共享總共1萬QPS的OSS并發(fā)使用量,可能因OSS并發(fā)量受限,而無法使用到100QPS的調(diào)用量上限。
Java SDK
請安裝如下Java SDK包。要求Java8及以上環(huán)境,如不滿足SDK版本所需環(huán)境要求請升級(jí)Java版本。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>viapi-utils</artifactId>
<version>1.0.2</version>
</dependency>
具體代碼示例如下。
import com.aliyun.com.viapi.FileUtils;
public class Main {
public static void main(String[] args) throws Exception {
// 創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://m.bestwisewords.com/document_detail/175144.html。
// 如果您使用的是RAM用戶的AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://m.bestwisewords.com/document_detail/145025.html。
// 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運(yùn)行代碼示例前必須先配置環(huán)境變量。
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// 場景一,使用本地文件
String file = "/tmp/bankCard.png";
// 場景二,使用任意可訪問的url
// String file = "https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg";
FileUtils fileUtils = FileUtils.getInstance(accessKeyId, accessKeySecret);
String ossUrl = fileUtils.upload(file);
// 生成的url,可用于調(diào)用視覺智能開放平臺(tái)的能力
System.out.println(ossUrl);
}
}
Python SDK
請安裝如下Python SDK。最低環(huán)境要求Python3及以上環(huán)境,如不滿足SDK版本所需環(huán)境要求請升級(jí)Python版本。
pip install oss2
pip install aliyun-python-sdk-viapiutils
pip install viapi-utils
具體代碼示例如下。
from viapi.fileutils import FileUtils
# 創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://m.bestwisewords.com/document_detail/175144.html。
# 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://m.bestwisewords.com/document_detail/145025.html。
# 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運(yùn)行代碼示例前必須先配置環(huán)境變量。
file_utils = FileUtils(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
# 場景一,使用本地文件,第一個(gè)參數(shù)為文件路徑,第二個(gè)參數(shù)為生成的url后綴,但是并不能通過這種方式改變真實(shí)的文件類型,第三個(gè)參數(shù)True表示本地文件模式
# oss_url = file_utils.get_oss_url("/tmp/bankCard.png", "png", True)
# 場景二,使用任意可訪問的url,第一個(gè)url,第二個(gè)參數(shù)為生成的url后綴,但是并不能通過這種方式改變真實(shí)的文件類型,第三個(gè)參數(shù)False表示非本地文件模式
oss_url = file_utils.get_oss_url("https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg", "jpg", False)
# 生成的url,可用于調(diào)用視覺智能開放平臺(tái)的能力
print(oss_url)
Node.js SDK
推薦使用NPM工具安裝依賴包。 最低環(huán)境要求Node 8.x以上,如不滿足SDK版本所需環(huán)境要求請升級(jí)Node版本。
npm install @alicloud/viapi-utils@^1.0.0 --save
JavaScript代碼示例如下。
const ViapiUtil = require('@alicloud/viapi-utils');
// 創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://m.bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://m.bestwisewords.com/document_detail/145025.html。
// 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運(yùn)行示例前必須先配置環(huán)境變量。
let accessKeyId = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID;
let accessKeySecret = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET;
// 場景一,使用本地文件
let file = "/tmp/bankCard.png";
// 場景二,使用任意可訪問的url
// let file = "https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg";
ViapiUtil.default.upload(accessKeyId, accessKeySecret, file)
.then(function(ossUrl) {
// 生成的url,可用于調(diào)用視覺智能開放平臺(tái)的能力
console.log(ossUrl);
})
.catch(function(err) {
console.log(err);
});
TypeScript代碼示例如下。
import ViapiUtil from '@alicloud/viapi-utils';
export default class Client {
static async main(): Promise<void> {
// 創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://m.bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://m.bestwisewords.com/document_detail/145025.html。
// 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運(yùn)行示例前必須先配置環(huán)境變量。
let accessKeyId: string = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID;
let accessKeySecret: string = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET;
// 場景一,使用本地文件
let file: string = "/tmp/bankCard.png";
// 場景二,使用任意可訪問的url
// let file: string = "https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg";
let ossUrl: string = await ViapiUtil.upload(accessKeyId, accessKeySecret, file);
// 生成的url,可用于調(diào)用視覺智能開放平臺(tái)的能力
console.log(ossUrl);
}
}
Client.main();
PHP SDK
推薦使用composer工具安裝依賴包。最低環(huán)境要求PHP 5.6, 如不滿足SDK版本所需環(huán)境要求請升級(jí)PHP版本。(暫不支持PHP 8)
composer require alibabacloud/viapi-utils
具體代碼示例如下。
<?php
namespace Alibabacloud\SDK;
use AlibabaCloud\SDK\ViapiUtils\ViapiUtils;
class Client {
public static function main() {
// 創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://m.bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://m.bestwisewords.com/document_detail/145025.html。
// 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運(yùn)行示例前必須先配置環(huán)境變量。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
// 場景一,使用本地文件
// $file = "/tmp/bankCard.png";
// 場景二,使用任意可訪問的url
$file = "https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg";
$ossUrl = ViapiUtils::upload($accessKeyId, $accessKeySecret, $file);
// 生成的url,可用于調(diào)用視覺智能開放平臺(tái)的能力
echo $ossUrl;
}
}
// 引入autoload.php
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Client::main(array_slice($argv, 1));
Go SDK
推薦使用Go工具安裝依賴包。最低環(huán)境要求必須不低于Go 1.15.x,如不滿足SDK版本所需環(huán)境要求請升級(jí)Go版本。
go get github.com/alibabacloud-go/viapi-utils/client
具體代碼示例如下。
package main
import (
"fmt"
"github.com/alibabacloud-go/tea/tea"
viapiutil "github.com/alibabacloud-go/viapi-utils/client"
)
func main() {
// 場景一,使用本地文件
file := tea.String("/tmp/bankCard.png")
// 場景二,使用任意可訪問的url
// file := tea.String("https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg")
// 上傳成功后,返回上傳后的文件地址
// 創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://m.bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://m.bestwisewords.com/document_detail/145025.html。
// 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運(yùn)行示例前必須先配置環(huán)境變量。
ossUrl, _err := viapiutil.Upload(tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), file)
if _err != nil {
fmt.Println(_err)
}
// 生成的url,可用于調(diào)用視覺智能開放平臺(tái)的能力
fmt.Println(*ossUrl)
}
.NET SDK
推薦使用Nuget工具安裝依賴包。最低環(huán)境要求net framework 4.5或.Net Core 2.0,如不滿足SDK版本所需環(huán)境要求請升級(jí).NET版本。
dotnet add package AlibabaCloud.SDK.VIAPIUtils
具體代碼示例如下。
using System;
// dotnet add package AlibabaCloud.SDK.VIAPIUtils
using AlibabaCloud.SDK.VIAPI.Utils;
namespace viapitest
{
class Program
{
static void Main(string[] args)
{
// 場景一,使用本地文件
// string file = "/tmp/bankCard.png";
// 場景二,使用任意可訪問的url
string file = "https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg";
// 創(chuàng)建AccessKey ID和AccessKey Secret,請參考http://m.bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權(quán)限AliyunVIAPIFullAccess,請參考http://m.bestwisewords.com/document_detail/145025.html。
// 從環(huán)境變量讀取配置的AccessKey ID和AccessKey Secret。運(yùn)行示例前必須先配置環(huán)境變量。
FileUtils fileobj = FileUtils.getInstance(Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
string ossUrl = fileobj.Upload(file);
// 生成的url,可用于調(diào)用視覺智能開放平臺(tái)的能力
Console.WriteLine(ossUrl);
}
}
}
其他語言
如果非以上6種語言,您可以自行實(shí)現(xiàn)viapiutils的相關(guān)邏輯,具體操作步驟如下:
調(diào)用GetOssStsToken接口獲取臨時(shí)的OSS STS Token,該Token建議在后續(xù)業(yè)務(wù)一次性使用。具體操作,請參見請求簽名。
接口Action:GetOssStsToken
接口版本號(hào):2020-04-01
域名:viapiutils.cn-shanghai.aliyuncs.com
無業(yè)務(wù)參數(shù)
返回?cái)?shù)據(jù)
名稱
類型
示例值
描述
AccessKeyId
String
STS.NTT2MimJtnhtStr14rzky****
STS臨時(shí)Token的AccessKeyID字段。
AccessKeySecret
String
9VoH2Q5s286TaA9yyfZHqXWezdq5qK4i6auR2Vd5****
STS臨時(shí)Token的AccessKeySecret字段。
SecurityToken
String
CAIShwN1q6Ft5B2yfSjIr5fh****...
STS臨時(shí)Token的SecurityToken字段。
使用臨時(shí)的OSS STS Token,將文件上傳到阿里云視覺智能開放平臺(tái)官方OSS Bucket。具體操作,請參見OSS SDK示例。
使用OSS STS Token上傳文件到阿里云視覺智能開放平臺(tái)官方OSS Bucket,需要注意以下幾點(diǎn):
上傳用到的OSS Bucket地域固定為cn-shanghai。
上傳用到的OSS Bucket名固定為viapi-customer-temp。
上傳的路徑前綴必須是您在步驟1中調(diào)用接口時(shí)所使用的AccessKeyId。
例如,您在步驟1調(diào)用時(shí)用到的AccessKeyId為LTAxxxxxxxabc,此時(shí)傳到OSS后的地址路徑應(yīng)該類似:LTAxxxxxxxabc/<uuid>/test.jpg。為了文件不相互覆蓋,建議您在路徑中加上
<uuid>
作為區(qū)分。
完成上傳后可獲取到OSS的URL地址,該地址用于后續(xù)接口請求。
地址路徑應(yīng)類似如下示例:
http://viapi-customer-temp.oss-cn-shanghai.aliyuncs.com/LTAxxxxxxxabc/<uuid>/test.jpg
說明該地址無法在瀏覽器直接打開或者直接訪問,您可以用它作為文件URL參數(shù)調(diào)用阿里云視覺智能開放平臺(tái)的算法。
此處以銀行卡識(shí)別(RecognizeBankCard)為例,為您介紹不同場景下如何實(shí)現(xiàn)viapiutils邏輯,調(diào)用其他算法接口請參考注釋修改代碼。