百度雲文字識別使用


實現一個功能,截一張圖片,利用百度文字識別技術識別出圖片內容,然后利用在線翻譯網站翻譯此內容。

實現此功能的前提是電腦有截屏功能,此文利用的是QQ截屏的功能,當然也可以使用微信截屏功能等,只不過快捷鍵不同罷了。

第一步,清空剪切板,需要導入from ctypes import windll, c_int這些方法,剪切板中的圖片存放在內存中。

    # ============== 清空剪切板, c_int(0)內存中的存儲區域
    user32 = windll.user32
    # 打開剪切板
    user32.OpenClipboard(c_int(0))
    # 清空剪切板
    user32.EmptyClipboard()
    # 關閉剪切板
    user32.CloseClipboard()

 

 

第二步,截屏,因為用的QQ截屏,所以快捷鍵是ctrl+alt+a,wait()函數會在此阻塞,直到你按下截屏鍵才會往下繼續

    # 檢測鍵盤按下,沒檢測到按下截圖鍵,繼續等待,檢測到了,代碼往下走。此處有個阻塞
    keyboard.wait(hotkey="ctrl+alt+a")

 

    # 獲取圖片內容
    while True:
        image = ImageGrab.grabclipboard()
        if image:
            image.save(img_path)
            break
        else:
            time.sleep(2)

 

注意:為什么要用while True,截屏是不是需要時間去選區域,然后點完成,在這期間,剪切板上是沒有數據的,用while True只是不斷的從剪切板掃描圖片而已,當發現圖片就退出循環了。

 

第三步,圖片轉文字,這個是使用的百度api,另外寫的一個py文件中。

word = get_text_from_image("screen.png")

 

 

第四步,翻譯文本

    result = requests.post(
        url="http://fy.iciba.com/ajax.php?a=fy",
        data={"f": "auto", "t": "auto", "w": word}
    ).json()

 

 

如此幾步,就可以完成一個簡單的圖片翻譯過程了。

 

百度api,自己可以注冊申請賬號,創建AppId、API Key、Secret Key,然后開始圖片轉文本工作,推薦博客:https://blog.csdn.net/student_zz/article/details/91491955?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

Python文字識別快速入門鏈接:https://ai.baidu.com/ai-doc/OCR/Dk3h7yf8m

不過我倒是沒有創建新的AppId、API Key、Secret Key,直接用的博客主分享出來的,謝謝博客主的分享,鏈接:https://blog.csdn.net/qq_33333654/article/details/102723118

 

源碼

translation.py

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
"""=================================================
@Project -> File    : six-dialog_design -> translation.py
@IDE     : PyCharm
@Author  : zihan
@Date    : 2020/5/26 18:10
@Desc    :  1. 清空剪切板
            2. 監測鍵盤按鍵"ctrl_alt+a", 阻塞程序直到得到截圖
            3. 將圖片中的文字提取出來,用的是百度雲的api
            4. 翻譯文字,用的是網頁上在線翻譯的接口:http://fy.iciba.com/
================================================="""
import requests
from ctypes import windll, c_int
from PIL import ImageGrab
import keyboard
import time
from aip_baidu_img2text_recognition import get_text_from_image
from pprint import pprint


# 清空剪切板
def clear_clipboard():
    # ============== 清空剪切板, c_int(0)內存中的存儲區域
    user32 = windll.user32
    # 打開剪切板
    user32.OpenClipboard(c_int(0))
    # 清空剪切板
    user32.EmptyClipboard()
    # 關閉剪切板
    user32.CloseClipboard()


# 獲取截圖
def get_image(img_path):
    # 獲取圖片內容
    while True:
        image = ImageGrab.grabclipboard()
        if image:
            image.save(img_path)
            break
        else:
            time.sleep(2)


# 翻譯文本
def translation(word):
    result = requests.post(
        url="http://fy.iciba.com/ajax.php?a=fy",
        data={"f": "auto", "t": "auto", "w": word}
    ).json()
    return result


def main():
    # 清空剪切板
    clear_clipboard()

    # 檢測鍵盤按下,沒檢測到按下截圖鍵,繼續等待,檢測到了,代碼往下走。此處有個阻塞
    keyboard.wait(hotkey="ctrl+alt+a")

    # 得到截屏的圖片存放到剪切板
    get_image("screen.png")

    print("開始識別!")

    # 獲取圖片中的文字
    word = get_text_from_image("screen.png")

    # 翻譯文字
    result = translation(word)
    # pprint(result)
    # 中文轉英文
    print(result["content"]["out"])
    # 英文轉中文
    # print(result["content"]["word_mean"])


if __name__ == '__main__':
    main()
View Code

aip_baidu_img2text_recognition.py

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
"""=================================================
@Project -> File    : six-dialog_design -> aip_baidu_img2text_recognition.py
@IDE     : PyCharm
@Author  : zihan
@Date    : 2020/5/26 18:44
@Desc    :借用api:https://blog.csdn.net/qq_33333654/article/details/102723118
            文字識別接口說明:https://ai.baidu.com/ai-doc/OCR/Dk3h7yf8m
================================================="""
from aip import AipOcr


"""你的 APPID AK SK"""
APP_ID = "17593750"
API_KEY = "VExogNuAiDslahMNe2uRn5IB"
SECRET_KEY = "zILi6zsRwgKa1dTmbv2Rw8uG1oPGyI9A"

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)


def get_text_from_image(image_path):
    if isinstance(image_path, bytes):
        image = image_path
    else:
        with open(image_path, "rb") as f:
            image = f.read()
    result_data = client.basicAccurate(image)
    # print(result_data)
    result_str = ""
    if result_data["words_result"]:
        for data in result_data["words_result"]:
            result_str += data['words']
    else:
        result_str = "No content"
    return result_str
View Code

 

成功,目前只試過截取單詞或者中文詞組,沒有試過句子,哈哈哈。

至於為什么用post,看圖,在哪兒看就不多說了,自己嘗試翻譯一個單詞就知道了。

 

post哪些數據來源, 繼續看圖

可以看出,當前需要翻譯的數據是"你好"。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM