Board logo

标题: [技术讨论] powershell调用百度ai进行文字识别 [打印本页]

作者: for_flr    时间: 2021-12-14 14:16     标题: powershell调用百度ai进行文字识别

https://ai.baidu.com/sdk#ocr     登陆创建自己的识图应用,记录下apikey,secretkey,并下载baidu-aip c#sdk。
  1. [system.reflection.Assembly]::LoadFrom("C:\Users\lenovo\net40\AipSdk.dll")
  2. [system.reflection.Assembly]::LoadFrom("C:\Users\lenovo\net40\Newtonsoft.Json.dll")
  3. write-host "识别中,请等待..." -foregroundcolor green
  4. $appid="25337405"
  5. $apikey="4z3B35eRopI6ya7HNusnejah"
  6. $secretkey="p9zrifkabzPrhDqgS8kv8OoHMpPWo3CI"
  7. $pic="C:\Users\lenovo\Desktop\code.jpg"
  8. $dirpic=dir $pic
  9. $ocr=new-object baidu.aip.ocr.ocr($apikey,$secretkey)
  10. $image=[system.io.file]::readallbytes($pic)
  11. $json=$ocr.generalbasic($image)
  12. $txt=$json.toString()|convertfrom-json
  13. $txt.words_result.words
  14. write-host "共识别$($txt.words_result_num)行文字" -foregroundcolor green
  15. cd $dirpic.directoryname
  16. $fn=$dirpic.basename+"_ocr.txt"
  17. sc -path $fn -value $txt.words_result.words
  18. $null=[console]::readkey()
复制代码

作者: for_flr    时间: 2021-12-14 14:24

本帖最后由 for_flr 于 2021-12-14 14:30 编辑

也可以用这种方式
  1. 作者@zaqmlp
  2. Add-Type -AssemblyName System.Web;
  3. $url='https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic';
  4. $pic='C:\Users\Administrator\Desktop\test.jpg';
  5. $imagedata=[Web.HttpUtility]::UrlEncode([Convert]::ToBase64String([IO.File]::ReadAllBytes($pic)));
  6. $poststr=@(   'access_token=24.b305c9822131e65eda05e29c157dd719.2592000.1559103982.282335-16139329',
  7.     $('image='+$imagedata),
  8.     'language_type=CHN_ENG',
  9.     'detect_direction=false',
  10.     'detect_language=false',
  11.     'probability=false'
  12. ) -join '&';
  13. $web=New-Object System.Net.WebClient;
  14. $web.Headers.Add('Content-Type', 'application/x-www-form-urlencoded');
  15. [byte[]]$postdata=[Text.Encoding]::UTF8.GetBytes($poststr);
  16. [byte[]]$responsedata=$web.UploadData($url, 'POST', $postdata);
  17. [Text.Encoding]::UTF8.GetString($responsedata);
复制代码
在这里看到的 http://www.bathome.net/viewthrea ... p;extra=&page=2
其中,access_token有效期30天,用以下方式返回
curl -i -k 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】'
作者: for_flr    时间: 2021-12-14 15:45

1楼运行到11行时,调用baidu.aip.ocr.ocr类的方法识别图片,会有几秒等待
运行时总觉得差点意思。
应该加个进度条,如下
  1. $code = {foreach($i in 1..50){$i;sleep -m 100}}   
  2. $newPowerShell = [PowerShell]::Create().AddScript($code)
  3. $handle = $newPowerShell.BeginInvoke()   
  4. while ($handle.IsCompleted -eq $false) {
  5.   Write-Host '.' -NoNewline
  6.   Start-Sleep -m 500
  7. }
  8. Write-Host ""
  9. $newPowerShell.EndInvoke($handle)
复制代码

作者: 5i365    时间: 2022-1-4 08:42

回复 2# for_flr

curl -i -k 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】'

    你好, 上面这行获取token的代码执行后会报下面的错,但是报错信息的后面有一堆返回的信息, 里面能找到token, 怎样把token单独取出来保存成变量?
-------------------------------
curl.exe :   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
所在位置 行:3 字符: 1
+ curl.exe -k "https://aip.baidubce.com/oauth/2.0/token?grant_type=clie ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (  % Total    % ...  Time  Current:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  2279    0  2279    0     0   2279      0 --:--:-- --:--:-- --:--:-- 16278
作者: 5i365    时间: 2022-1-4 08:51

本帖最后由 5i365 于 2022-1-4 08:52 编辑

回复 1# for_flr


    你好, 使用这个ps代码, 可以成功识别, 但是识别的结果中经常丢字, 有些地方还没有识别, 例如下面这个图片, 没有识别后面的英文, 也丢了很多字


识别的结果是:
-------------
哪位大侠能搞个批处理,能把所有cmd的多行代码连成一行代码?感觉只要不是for语句就用&连接,然后专
下for语句就好
歌以前搜索过相关的答案,好像国外有关似问题的答案,很长时间了,找不到在啷个贴子了
人前也专门
有找到答案,可能搜索的关键词不对

以连接行
关键是处
外,真心感觉批处理的执行速度比 powershell快,如果是循环执
行的需求
这里有合并fo语句的示例
并后
作者: for_flr    时间: 2022-1-4 09:23

回复 5# 5i365
取token值报错,具体原因需要查看百度ai文档。一般是appid或者apikey值有错。
不推荐批处理代码合并为一行,影响阅读,不便于维护。吃力不讨好;powershell优点多多,只是启动的时候有点慢- -
作者: 5i365    时间: 2022-1-4 09:49

本帖最后由 5i365 于 2022-1-4 09:50 编辑

回复 6# for_flr


能取到token值, 显示在报错信息的下面一堆字符中

多行合一行, 是有个软件只能接受单行的批处理命令, 所以要合为一行

另外为什么识别的结果总是丢字呢?
作者: 5i365    时间: 2022-1-18 10:56

回复 6# for_flr


诚邀大侠能方便的时候修改完善一下, 这个谷歌翻译的代码, 非常感谢
http://www.bathome.net/thread-61370-1-1.html




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2