画像認識には Ali OCR インターフェイスを使用する
ここにあるのは、その後の簡単な作業のためのコードの記録だけです。コードの説明はあまり多くありませんが、必要な場合は、Ali の OCR ドキュメントも結合する必要があるため、より高速です。
Ali OCR リンク: https://duguang.aliyun.com/
# 图片进行识别后再导出为表格文档
import sys
from typing import List
from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_darabonba_stream.client import Client as StreamClient
from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
def create_client(
access_key_id: str,
access_key_secret: str,
) -> ocr_api20210707Client:
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret)
# 访问的域名
config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
return ocr_api20210707Client(config)
def pic_table(pic_path):
"""
这里需要改变!!!!!
"""
client = create_client('输入你的AccessKey ID', '输入你的AccessKey Secret')
body_syream = StreamClient.read_from_file_path(pic_path)
recognize_table_ocr_request = ocr_api_20210707_models.RecognizeTableOcrRequest(
body=body_syream)
runtime = util_models.RuntimeOptions()
response = client.recognize_table_ocr_with_options(recognize_table_ocr_request, runtime)
body = response.body
#那到数据后
filename='body.json'
with open(filename,'w',encoding='utf-8') as f:
f.write(str(body))
with open('body.json','r',encoding='utf-8') as f:
content = f.read().rstrip()
content = eval(content)
data = content['Data']
data = eval(data)
key = data.keys()
con = data['prism_tablesInfo'][0]['cellInfos']
key = []
value = []
for i in range(len(con)):
key.append(con[i]['yec'])
value.append(con[i]['word'])
dic = list(zip(key,value))
c = []
for i in list(set(key)):
r = []
for j in range(len(dic)):
if dic[j][0] == i:
r.append(dic[j][1])
c.append(r)
ls = []
for i in range(len(c)):
ls.append(len(c[i]))
a = max(ls)
for i in range(len(c)):
if len(c[i]) < a:
c[i].extend('N'*(a-len(c[i])))
elif len(c[i]) > a:
for j in range(a-len(c[1])):
c[i].remove('')
else:
pass
import pandas as pd
table = pd.DataFrame(columns=[i for i in range(a)])
for i in range(len(c)):
table.loc[i]=c[i]
table.to_excel(pic_path[0:-4]+'table.xlsx',encoding='utf-8-sig',index=False)
import os
"""
这里需要改变,输出表格后,存放的目录!!!!!
"""
path = '你的目录'
dirs = os.listdir(path)
pic_l = []
for i in dirs:
dir = os.path.join(path,i)
pic_l.append(dir)
for i in range(10,18):
pics = os.listdir(pic_l[i])
for j in pics:
try:
pic_s = os.path.join(pic_l[i], j)
pic_table(pic_s)
except:
print('error')
# 仅仅做识别
import sys
import os
import json
from typing import List
from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_darabonba_stream.client import Client as StreamClient
from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
path = '图片的路径'
accessKeyId = '你的ID'
accessKeySecret = '你的Secret'
#dirs = os.listdir(path)
class OCRStart:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> ocr_api20210707Client:
config = open_api_models.Config(
access_key_id= access_key_id,
access_key_secret= access_key_secret
)
config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
return ocr_api20210707Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
client = OCRStart.create_client(accessKeyId, accessKeySecret)
# 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
body_syream = StreamClient.read_from_file_path('photo/5.0埋点v1.2.22.JPG')
recognize_table_ocr_request = ocr_api_20210707_models.RecognizeTableOcrRequest(
body=body_syream
)
runtime = util_models.RuntimeOptions()
try:
reqData = client.recognize_table_ocr_with_options(recognize_table_ocr_request, runtime)
print(reqData)
#reqData 就是最终识别并返回的数据
except Exception as error:
# 如有需要,请打印 erro
print(error.message)
# 和上面方法一样,只不是这个是 异步 的方式
@staticmethod
async def main_async(
args: List[str],
) -> None:
client = Sample.create_client(accessKeyId, accessKeySecret)
body_syream = StreamClient.read_from_file_path('photo/5.0埋点v1.2.22.JPG')
recognize_table_ocr_request = ocr_api_20210707_models.RecognizeTableOcrRequest(
body=body_syream
)
runtime = util_models.RuntimeOptions()
try:
reqData = client.recognize_table_ocr_with_options(recognize_table_ocr_request, runtime)
print(reqData)
except Exception as error:
# 如有需要,请打印 erro
print(error.message)
if __name__ == '__main__':
OCRStart.main(sys.argv[1:])