文件URL处理

使用阿里云视觉智能开放平台服务时,需要传入文件URL,视觉智能平台根据传入的文件URL对文件进行智能处理。本文介绍如何处理本地文件或网络文件链接。

背景信息

阿里云视觉智能开放平台服务的接口响应时间依赖文件的下载时间,为了保证被检测文件不会下载超时,建议您使用阿里云OSS存储文件。

说明

阿里云视觉智能开放平台视觉AI能力API接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。

OSS文件

  1. 登录OSS管理控制台

  2. 创建存储空间

    创建Bucket选择区域时,需要选择与视觉智能开放平台对应服务能力相同的区域,当前视觉智能开放平台各服务支持的区域为华东2(上海)

    说明

    如果您的OSS所在地域不是华东2(上海),请参见非上海地域OSS文件进行调用。

  3. 上传本地文件到OSS服务。

    具体操作请参见上传文件

  4. 查看文件URL。

    在已上传图片列表中,单击详情查看并复制图片URL。

非上海地域OSS文件

对于非OSS文件,或者您的OSS所属地域不是华东2(上海),推荐您使用SDK进行调用。

方式一(推荐方式)

使用各语言对应的新版SDK,目前新版SDK已经支持文件在本地或者非上海地域OSS文件,将文件以stream形式传入进行后续调用,详情请参见各语言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 {
            // "YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
            // 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
            // 您的AccessKeyID
            String accessKey = "YOUR_ACCESS_KEY_ID";
            // 您的AccessKeySecret
            String accessKeySecret = "YOUR_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(accessKey, 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
    # "YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
    # 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
    file_utils = FileUtils("YOUR_ACCESS_KEY_ID", "YOUR_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');
    // "YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
    // 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
    // 您的AccessKeyID
    let accessKeyId = "YOUR_ACCESS_KEY_ID";
    // 您的AccessKeySecret
    let accessKeySecret = "YOUR_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> {
        // "YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
        // 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
        // 您的AccessKeyID
        let accessKeyId: string = "YOUR_ACCESS_KEY_ID";
        // 您的AccessKeySecret
        let accessKeySecret: string = "YOUR_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版本。

    composer require alibabacloud/viapi-utils

    具体代码示例如下。

    <?php
    namespace Alibabacloud\SDK;
    use AlibabaCloud\SDK\ViapiUtils\ViapiUtils;
    class Client {
        public static function main() {
            // "YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
            // 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
            // 您的AccessKeyID
            $accessKeyId = "YOUR_ACCESS_KEY_ID";
            // 您的AccessKeySecret
            $accessKeySecret = "YOUR_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() {
        // "YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
        // 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
        // 您的AccessKeyID
        accessKeyId := tea.String("YOUR_ACCESS_KEY_ID")
        // 您的AccessKeySecret
        accessKeySecret := tea.String("YOUR_ACCESS_KEY_SECRET")
        // 场景一,使用本地文件
        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")
        // 上传成功后,返回上传后的文件地址
        ossUrl, _err := viapiutil.Upload(accessKeyId, accessKeySecret, 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)
            {
                // "YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET" 的生成请参考https://help.aliyun.com/document_detail/175144.html
                // 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
                // 您的AccessKeyID
                string accessKeyId = "YOUR_ACCESS_KEY_ID";
                // 您的AccessKeySecret
                string accessSecret = "YOUR_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 fileobj = FileUtils.getInstance(accessKeyId, accessSecret);
                string ossUrl = fileobj.Upload(file);
                // 生成的url,可用于调用视觉智能开放平台的能力
                Console.WriteLine(ossUrl);
            }
        }
    }

  • 其他语言

    如果非以上6种语言,您可以自行实现viapiutils的相关逻辑,具体操作步骤如下:

    1. 调用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字段。

    2. 使用临时的OSS STS Token,将文件上传到阿里云视觉智能开放平台官方OSS Bucket。具体操作,请参见OSS SDK示例

      使用OSS STS Token上传文件到阿里云视觉智能开放平台官方OSS Bucket,需要注意以下几点:

      1. 上传用到的OSS Bucket地域固定为cn-shanghai

      2. 上传用到的OSS Bucket名固定为viapi-customer-temp

      3. 上传的路径前缀必须是您在步骤1中调用接口时所使用的AccessKeyId。

        例如,您在步骤1调用时用到的AccessKeyId为LTAxxxxxxxabc,此时传到OSS后的地址路径应该类似:LTAxxxxxxxabc/<uuid>/test.jpg。为了文件不相互覆盖,建议您在路径中加上<uuid>作为区分。

    3. 完成上传后可获取到OSS的URL地址,该地址用于后续接口请求。

      1. 地址路径应类似如下示例:

        http://viapi-customer-temp.oss-cn-shanghai.aliyuncs.com/LTAxxxxxxxabc/<uuid>/test.jpg
        说明

        该地址无法在浏览器直接打开或者直接访问,您可以用它作为文件URL参数调用阿里云视觉智能开放平台的算法。

    此处以银行卡识别(RecognizeBankCard)为例,为您介绍不同场景下如何实现viapiutils逻辑,调用其他算法接口请参考注释修改代码。

阿里云首页 视觉智能开放平台 相关技术圈