日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

VBA调用百度智能云的文字识别获取图片中的数字

發布時間:2023/12/13 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 VBA调用百度智能云的文字识别获取图片中的数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

平時經常需要把相片中的文字轉換為可編輯的文字。

百度的文字識別可以讓C#、Python等語言調用。我把它整合到了API封裝庫了。

API封裝庫的下載和部署,請參考下帖:

https://www.cnblogs.com/ryueifu-VBA/p/10128063.html

下面我演示一下,如何在VBA中調用API封裝庫中的Image2Character函數,實現了提取相片中的數據。

在Excel VBA中添加外部引用API和正則表達式。

模塊中的代碼如下:

Private S As String
Sub GetData()
    Dim B As New API.Baidu
    Dim Result As String
    S = B.Image2Character(imagepath:="E:粉煤灰2.jpg")
    Debug.Print S
End Sub
Sub Split()
    Dim Reg As RegExp, MC As MatchCollection, M As Match
    Set Reg = New RegExp
    With Reg
        .Global = True
        .Pattern = Chr(34) & "([0-9.]+)mg/L" & Chr(34)
        Set MC = .Execute(S)
        For Each M In MC
            Debug.Print M.SubMatches(0)
        Next M
    End With
End Sub

GetData負責把電腦中的一個圖片中的文字提取出來,賦給變量S。

Split負責把變量S根據指定的模式進行分解。

本例處理的是一張化工物質含量檢測的科研圖片,該圖片中含有L22和L23兩個樣品的數據,我關心的是Conc這一列,也就是單位是mg/L的。

當我執行了GetData過程以后,立即窗口結果:

可以看到變量S是一個JSON字符串,定義了每一個單詞在圖片中的位置(Location)、寬度高度等,另外鍵Words對應的就是要提取的文本了。那么這么長一個JSON包含很多mg/L結尾的數字,如何提取出來呢?可以用JavaScript的功能,也可以用正則表達式。此處簡單地用模式"([0-9.]+)mg/L" 就可以獲取全部。

繼續執行Split方法,立即窗口打印出純數字。接下來把這些粘貼到單元格中就可以進行處理了。

很多情況下,用戶想得到的是圖片中的表格內容。但是利用文字識別功能得到是是一個很長的字符串,破壞了原來表格的結構。不過沒關系,利用JSON或正則表達式還可以還原為矩陣形式的表格,這屬于字符串處理的內容。

另外,百度的這個功能也支持網絡上圖片的文字識別, 例如https://i.cnblogs.com/assets/adminlogo.png中的圖片為:

把這個路徑傳遞到Image2Character函數中,可以看到運行后S的值中包含“博客園”。

從上面的輸出結果可以看到,輸出的JSON字符串中包含location這些位置信息。不過這個函數可以讓用戶選擇是否需要位置信息。

另外,還可以事先傳達給程序,這個圖片中是哪一國家的文字,默認是CHN_ENG。如果是中英文以外的圖片,必須傳遞參數。

可以指定哪些參數,請參考百度文字識別的技術文檔:

https://cloud.baidu.com/doc/OCR/s/tk3h7y2aq

假設我有一張日語的圖片。

代碼應該修改為

Sub GetData()
    Dim B As New API.Baidu
    Dim Result As String
    S = B.Image2Character(imagepath:="D:TempJP.jpg", Containslocation:=False, Options:="&language_type=JAP")
    Debug.Print S
End Sub

注意,Options參數必須用&開頭。

再次運行上述程序,識別結果為:

{"log_id": 4725858224074987814, "words_result_num": 11, "words_result": [{"words": "RANDEN "}, {"words": "等持院"}, {"words": "B 8 "}, {"words": "立命館大學衣笠キャンパス前"}, {"words": "Ritsumeikan University "}, {"words": "りょうあんし"}, {"words": "とうじいん"}, {"words": "きたのはくばいちょう"}, {"words": "Ryoanji "}, {"words": "りめいんだいがくきがさきゃんすまえ"}, {"words": "B 9 "}]}

如果不傳遞language_type,那么程序不知道圖片里有日文,結果就完全不一樣了。

總結

以上是生活随笔為你收集整理的VBA调用百度智能云的文字识别获取图片中的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。