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