尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

基于 Trae + DeepSeek 的 Vibe Coding 实践指南(三):视频 OCR SDK 接入详解

基于 Trae + DeepSeek 的 Vibe Coding 实践指南(三):视频 OCR SDK 接入详解
📅 发布时间:2026/7/4 4:13:43

目录

  • 前言
  • 一、阿里云视觉开发智能平台配置
    • 1.1 熟悉视觉开发智能平台
      • 1.1.1 视频理解能力介绍
      • 1.1.2 视频理解示例代码
    • 1.2 开通和购买产品
    • 1.2.1 视频理解能力OCR开通和购买
    • 1.3 跑通示例代码之接入SDK
      • 1.3.1 视频理解【OCR】SDK接入
        • 1.3.1.1 异步调用相关
  • 结语





🎬 云泽Q:个人主页

🔥 专栏传送入口: 《C语言》《数据结构》《C++》《Linux》《蓝桥杯系列》《笔试算法》《AI赋能》
⛺️遇见安然遇见你,不负代码不负卿~

前言

大家好啊,我是云泽Q,欢迎阅读我的文章,一名热爱计算机技术的在校大学生,喜欢在课余时间做一些计算机技术的总结性文章,希望我的文章能为你解答困惑~
该篇文章为项目中后端部分配合阿里云视觉开发平台的实现,建议分为两部分来看,第一部分是先看完视频理解能力,第二部分才开图片内容相关的,二者在项目搭建的时候我也是分开做的

一、阿里云视觉开发智能平台配置

1.1 熟悉视觉开发智能平台

1.1.1 视频理解能力介绍

视频理解能力介绍【OCR】
上面是官方的介绍文档

专栏中我只做影视字幕识别,自己感兴趣的话演职员表识别和体育文字识别都是可以自己做的

也有接入指引和对视频的一些限制

1.1.2 视频理解示例代码

视频OCR
我们先来看一下代码
将来我们项目中上传的视频一定是从我们电脑本地传上去的,而图片中这里文件在上海地域OSS,指的是视频上传到上海的云服务器,所以看的不是这里的代码

我们看的是这里的代码,这里的意思是我们的文件在本地电脑上,或者直接给他一个视频链接。项目中实现的是文件在本地,由于我们的项目是Java写的,所以这里就选择Java代码

/* 引入依赖包 <!-- https://mvnrepository.com/artifact/com.aliyun/videorecog20200320 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>videorecog20200320</artifactId> <version>${aliyun.videorecog.version}</version> </dependency> */importcom.aliyun.tea.TeaException;importcom.aliyun.tea.TeaModel;importcom.aliyun.videorecog20200320.models.RecognizeVideoCastCrewListResponse;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.net.URL;publicclassRecognizeVideoCastCrewList{publicstaticcom.aliyun.videorecog20200320.ClientcreateClient(StringaccessKeyId,StringaccessKeySecret)throwsException{/* 初始化配置对象com.aliyun.teaopenapi.models.Config Config对象存放 AccessKeyId、AccessKeySecret、endpoint等配置 */com.aliyun.teaopenapi.models.Configconfig=newcom.aliyun.teaopenapi.models.Config().setAccessKeyId(accessKeyId).setAccessKeySecret(accessKeySecret);// 访问的域名config.endpoint="videorecog.cn-shanghai.aliyuncs.com";returnnewcom.aliyun.videorecog20200320.Client(config);}publicstaticvoidmain(String[]args)throwsException{// 创建AccessKey ID和AccessKey Secret,请参见:https://help.aliyun.com/document_detail/175144.html// 如果您使用的是RAM用户的AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参见:https://help.aliyun.com/document_detail/145025.html// 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。StringaccessKeyId=System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");StringaccessKeySecret=System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");com.aliyun.videorecog20200320.Clientclient=RecognizeVideoCastCrewList.createClient(accessKeyId,accessKeySecret);// 场景一,使用本地文件//InputStream inputStream = new FileInputStream(new File("/tmp/RecognizeVideoCastCrewList1.mp4"));// 场景二,使用任意可访问的urlURLurl=newURL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/videorecog/videorecog/videorecog2.mp4");InputStreaminputStream=url.openConnection().getInputStream();com.aliyun.videorecog20200320.models.RecognizeVideoCastCrewListAdvanceRequestrecognizeVideoCastCrewListAdvanceRequest=newcom.aliyun.videorecog20200320.models.RecognizeVideoCastCrewListAdvanceRequest().setVideoUrlObject(inputStream);com.aliyun.teautil.models.RuntimeOptionsruntime=newcom.aliyun.teautil.models.RuntimeOptions();try{// 复制代码运行请自行打印 API 的返回值RecognizeVideoCastCrewListResponseresponse=client.recognizeVideoCastCrewListAdvance(recognizeVideoCastCrewListAdvanceRequest,runtime);System.out.println(com.aliyun.teautil.Common.toJSONString(TeaModel.buildMap(response)));}catch(TeaExceptionerror){// 获取整体报错信息System.out.println(com.aliyun.teautil.Common.toJSONString(error));// 获取单个字段System.out.println(error.getCode());}}}

我们只需要把这段代码复制一下,回到Trae

在java开头的下面,右键新建一个文件夹,随便取一个名字,我这里就是test,然后右键test这个文件夹,再新建一个文件,文件名为RecognizeVideoCastCrewList.java(实际上就是上面代码的类名加个java后缀)

创建好之后Trae会默认写好一部分代码,但是我们不需要这段代码,只需要把刚刚的阿里云平台的示例代码复制粘贴进来就好了,注意图片中有一个漏掉的点,Trae会默认写好一部分代码会带有package com.example.demo.test;这样的第一段代码,这个要留着

这样我们就将示例代码拿过来的,有的兄弟此时代码中可能会标有红线,代表有bug,原因是阿里云平台的示例代码最前面写了,需要引入依赖包…,意思是未注释的代码实现的时候也使用了一些工具,这些工具就是最上方被注释掉的灰色部分,这还需要一些操作,这个放到后面再说,先紧接着跳到目录中开通和购买产品来看

1.2 开通和购买产品

1.2.1 视频理解能力OCR开通和购买

刚刚复制粘贴进来的代码,其中调用的视频相关的工具都是阿里云写好的工具,这也就意味着我们需要花钱购买,但实际上是不需要的,阿里云有一个活动会给你一定免费的额度,我在做项目的时候是验证了用不完的,所以完全不用担心,就算真的需要购买,也非常便宜

视频理解能力介绍【OCR】,依旧是打开该网址链接,其中有一个计费说明


可以从这里跳转进去或者直接点我这里放好的链接,视频理解计费介绍

我们需要向下滑动看视频OCR这里,可以看到有按量计费一分钟8分钱,还有预付费资源包,50块钱5000点,我就这么说,项目所需50点不到。然后点击右侧高亮的购买资源包


一般来说,这里第一次使用点进来都是免费试用的,就是免费给你5000点,但是据说还区分地域之类的。如果你不是免费的,那按量计费也是完全OK的,价格便宜,你放一个60分钟的视频也就5块钱,现在买个游戏充个皮肤少说页10块起步,所以为了学习稍微投资一点我觉得也是完全值得的

按量计费钱你需要保证你的云平台账户(阿里云账户)里有余额,或者绑定了自动扣款的支付方式(如支付宝)。当你的代码通过 SDK 调用了“视频拆条”功能(后面会讲),系统会在后台默默记账(按照截图里说的,0.08元/分钟)。平台通常会按小时或按天,直接从你的账户余额里把钱扣掉。
按量计费直接进入我贴到这里的通道能力开通

选择视频理解,点击立即开通

后面就会跳转出一个界面显示开通成功

1.3 跑通示例代码之接入SDK

1.3.1 视频理解【OCR】SDK接入

SDK就是你前面赋值到 Trae 中的代码报错的原因,代码处圈红的意思是使用了阿里云的一些工具,这些工具的使用就是要付费的,代码不要钱,前面你如果开通了资源包,就点击这个高亮链接跳转即可,按量计费的也可以不用管直接进入,因为到时候使用之后它会给你发一个支付订单可支持的SDK列表

跳转到这个页面点击Java

跳转到该页面之后由于我们做的是视频理解,所以只用关注对应行的SDK链接,点击对应的SDK链接

经过安全验证后就会进入这个界面,点击1.0.12

进入到这个界面框中就是我们所需要的东西了,我也放在这里方便直接复制使用

<!--Source:https://mvnrepository.com/artifact/com.aliyun/videorecog20200320 --><dependency><groupId>com.aliyun</groupId><artifactId>videorecog20200320</artifactId><version>1.0.12</version><scope>compile</scope></dependency>

然后直接复制该段代码,打开Trae,点击pom文件,找到两个dependencies中间包含的内容

使用TAB键缩进到和前面代码中的一样就好了

然后使用CTRL + s保存一下,Trae就会自动检查,然后右下角会跳出一个窗口,这里有一个更新,你想同步吗,点击YES即可

然后我们原本在pom文件下的红线就消失了,意味着Trae可以识别到阿里云的工具了

1.3.1.1 异步调用相关

现在整个项目最基础的要求已经达到了,就是没有报错。但是该项目还涉及一个异步调用的概念
异步调用能力介绍
“异步调用”就像是去热门餐厅吃饭拿号。
同步 = 排队死等。 就像买路边摊,付了钱你只能傻站在那儿盯着老板做,期间啥也干不了。
异步 = 拿号走人。 就像去餐厅拿了个排队号码(也就是系统给你的“任务编号”),拿到号你就可以去逛街了。等后台默默处理完,你再拿着号去查结果,或者等系统发通知叫你。

为什么云服务处理视频要用“异步”?
因为处理视频通常很慢!如果让程序傻等(同步),你的软件就会像死机一样卡住。用“拿号走人”(异步)的办法,交代完任务程序就可以立马去忙别的,一点都不耽误事儿

而接入异步调用 SDK,就像是请了一位跑腿小秘书
第一,当你在代码里调用它时,你只需要给它一句简单的指令
这个 SDK 小秘书收到后,会自动在后台帮你打包好视频、发给阿里云、并把拿到的“任务编号(TaskId)”整整齐齐地带回来交给你。你不需要管中间复杂的网络传输细节。

第二,阿里云在后台处理视频需要时间,SDK 里面通常会自带一些工具(或者非常简单的命令),让你能用一两行代码就实现:“每隔 3 秒自动去问一下阿里云好没好,一旦好了就把文字结果带回来”。

接下来点击下方链接
实例代码:异步调用代码

/* 引入依赖包 最低SDK版本要求:viapi20230117的SDK版本需大于等于2.0.1。 可以在此仓库地址中引用最新版本SDK:https://mvnrepository.com/artifact/com.aliyun/viapi20230117 <!-- https://mvnrepository.com/artifact/com.aliyun/viapi20230117 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>viapi20230117</artifactId> <version>${aliyun.viapi.version}</version> </dependency> */importcom.aliyun.tea.TeaModel;importcom.aliyun.viapi20230117.models.GetAsyncJobResultResponse;publicclassGetAsyncJobResult{publicstaticcom.aliyun.viapi20230117.ClientcreateClient(StringaccessKeyId,StringaccessKeySecret)throwsException{/* 初始化配置对象com.aliyun.teaopenapi.models.Config Config对象存放 AccessKeyId、AccessKeySecret、endpoint等配置 */com.aliyun.teaopenapi.models.Configconfig=newcom.aliyun.teaopenapi.models.Config().setAccessKeyId(accessKeyId).setAccessKeySecret(accessKeySecret);// 访问的域名config.endpoint="viapi.cn-shanghai.aliyuncs.com";returnnewcom.aliyun.viapi20230117.Client(config);}publicstaticvoidmain(String[]args_)throwsException{// 创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html// 如果您使用的是RAM用户的AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html// 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。StringaccessKeyId=System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");StringaccessKeySecret=System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");com.aliyun.viapi20230117.Clientclient=GetAsyncJobResult.createClient(accessKeyId,accessKeySecret);com.aliyun.viapi20230117.models.GetAsyncJobResultRequestgetAsyncJobResultRequest=newcom.aliyun.viapi20230117.models.GetAsyncJobResultRequest().setJobId("1299348D-DFF2-5FDA-8C9C-C2D14EBF63F2");com.aliyun.teautil.models.RuntimeOptionsruntime=newcom.aliyun.teautil.models.RuntimeOptions();try{GetAsyncJobResultResponsegetAsyncJobResultResponse=client.getAsyncJobResultWithOptions(getAsyncJobResultRequest,runtime);// 获取整体结果。System.out.println(com.aliyun.teautil.Common.toJSONString(TeaModel.buildMap(getAsyncJobResultResponse)));// 获取单个字段。System.out.println(getAsyncJobResultResponse.getBody());}catch(com.aliyun.tea.TeaExceptionteaException){// 获取整体报错信息。System.out.println(com.aliyun.teautil.Common.toJSONString(teaException));// 获取单个字段。System.out.println(teaException.getCode());}}}

然后复制图中的Java代码

然后和前面一样,打开Trae,在test文件夹下新建一个文件,或者一个Java类都可以,文件名是实例代码中的类名加一个java后缀,GetAsyncJobResult.java

除了新建文件的第一行代码不动,其他直接粘贴进来

报红的原因和之前一样,需要在pom放入SDK代码,和前面一样,直接复制我放在这里的和进链接拿都可以,放到pom里

<!--Source:https://mvnrepository.com/artifact/com.aliyun/viapi20230117 --><dependency><groupId>com.aliyun</groupId><artifactId>viapi20230117</artifactId><version>2.0.1</version><scope>compile</scope></dependency>

SDK:异步调用SDK




简单来说一下现在的代码逻辑,我们现在有两份代码,第一份代码是RecognizeVideoCastCrewList,第二份代码是GetAsyncJobResult,第一份代码运行之后会产生一份结果传到第二份代码中,第二份代码的运行结果是我们最终要的结果
首先要对示例代码进行一些更改,示例代码并不是可以直接使用的,就先改产生第一份结果的RecognizeVideoCastCrewList

用阿里云的东西和deepseek一样,要有对应的APIkey,有了key以后,阿里云才会识别到是你在使用,每一个人都有独一无二的key
鼠标滑倒右上角头像这里,会有一个AccessKey,点击打开

按图示操作点击红框所选位置

然后点击左上角创建AccessKey,就会继续跳出下面的窗口

上述选项点击之后就会发验证码

验证之后就会得到两个值,一个是AccessKey ID,一个是AccessKey Secret,你和它们只有一次见面机会

把他们拿出来,填到图示打码位置即可,注意标点符号都是英文的

然后示例代码中是给有测试视频的,时长22s,这是一个可访问的URL,可以复制网址到浏览器打开

可以选择右键,把该视频另存到自己电脑上待会我们使用

代码的作用就是读取这个网站上的视频链接进行解析

接下来就可以进行代码的初步跑通了,可以看上图代码给的注释,视频也可以使用本地的文件,我这里就用它给的示例视频了跑一下看最终会返回一个什么结果给第二步使用,鼠标右键run Java。

注意:期间如果出现报错,可以像我右侧对话栏那样,把错误信息扔给AI让它自己解决,Vibe Coding,我们不用自己动手

可以看到输出结果有一个RequestId,这个ID就是第一步的结果,我们第二步要使用这个ID

我们把它复制一下放到箭头所指位置,注意第二步里也有accessKeyId和accessKeySecret,不要忘记了。

在完成所有改动后在第二步里我们依旧右键Run Java,输出结果如下图所示

我们最终想拿到的是一个中文字幕,这需要从网上下载,这个输出结果稍微懂一点中文也是很好看的,subtitlesChineseResultsUrl就是中文字幕,对应的subtitlesEnglishResultsUrl就是英文字幕
我们把网址复制下来在浏览器上打开,就可以把字幕下载下来,复制下来如果打开没有下载字幕把最后的\删掉。

http://vibktprfx-prod-prod-media-ai-cn-shanghai.oss-cn-shanghai.aliyuncs.com/video-ocr/1782973278_NvGYcQoabH.srt?Expires=1782975078&OSSAccessKeyId=LTAI4FoLmvQ9urWXgSRpDvh1&Signature=Rpfiz5HOGIqXiX6zJFIUeZws%2B%2F8%3D

这里我把下载的字幕用记事本打开,可以看到也是非常可以的,这时候是没有前端界面的,但是经过了这一系列坎坷的操作,起码证明了我们的代码是没有问题的

我们接下里就要做一个图形化界面,这样才对用户更友好,可以说剩下的部分才是真正的vebe coding

接下来的内容我会放在下一篇文章去讲,因为这一片文章的字数已经很多了~


结语

相关新闻

  • 手把手教你学 Simulink——基于多标量控制(Multi‑Scalar / Multi‑D Control)的工业感应电机高效节能控制策略仿真
  • 机械除草产业深度复盘|技术精度拉满却大面积溃败,ROI回本周期才是农业科技终极生死线
  • 学生党AI工具选购指南:算清时间-金钱-效果三角账

最新新闻

  • vscode-clangd核心功能详解:代码补全、诊断与格式化全攻略
  • LLM编程过度工程化挑战:Andrej Karpathy技能框架的技术解构
  • AI赋能JMeter性能测试:智能脚本生成与优化实战
  • StudioPlugins依赖管理:GoogleLibraryVersionQuerier插件查询库版本
  • 如何实现基于 SkeyeVSS视频汇聚管理平台和 NVR录像机的视频监控接入与汇聚
  • 如何让老款Mac电脑焕发新生:OpenCore Legacy Patcher完全指南

日新闻

  • STM32F745VG与MC6470 IMU的高性能姿态控制系统设计
  • 机器不消费,人何以生存
  • AI项目操作手册编写规范与最佳实践

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号