最近在学图像识别,浅做一下笔记 图像识别 # 需要的模块 # import os # #光学识别生成器 # from cnocr import CnOcr # #读取图片(主要用到 ,裁剪图片的功能) # from PIL import Image # # 流程 # 通过os模块读取文件位置 # 获取每张图片的名字 实例化图片对象 # 通过Image库 对文件对象进行位置裁剪 获取需要被识别的位置的坐标(左上右下) # 对裁剪下来的文件进行单独保存 # 通过ocr模块对文本进行识别 # 返回数据
# 文件操作模块
import os
# 光学识别生成器w
from cnocr import CnOcr
# 读取照片(主要用到其,裁剪照片功能)
from PIL import Image
# 写入excel模块
import openpyxl
# 识别中文或者数字的对象
ocr = CnOcr()
image_src = r"./images"
# 这是要提取的数据的位置定位参数 顺序(左(x),上(y),右(x),下(y))
place=[[186,205,347,237],[1298,85,1455,112],[977,964,1050,994],[510,762,641,789]]
def shibie():
image_list = []
datalist=[]
# os.walk()目录遍历器
# 遍历这个文件夹的所有照片文件名字 root:当前文件夹的名字, dirs当前文件夹下的所有目录,列表形式 file当前文件的下的所有文件 列表形式
for root, dirs, file in os.walk(image_src):
# 由于在for循环内所以需要把他抛出for循环
image_list = file
print(root)
print(dirs)
print(file)
for i in image_list:
data = []
image_url = "images/" + i
# 机器读取图片需要读取字节码
# 将img.open()括号中的内容更改为你的图片地址
new_img = Image.open(image_url)
for v in place:
# print(new_img)
left = v[0]
up = v[1]
right = v[2]
down = v[3]
# 通过上面给出的坐标去裁剪照片 这里的方法最多传入一个参数 那这个参数就是包含所有坐标的元祖参数
imag_x = new_img.crop((left, up, right, down))
# 将照片进行保存
imag_x.save("imag1.png")
# 通过实例化的图片识别对象去识别裁剪下来的照片上的内容
image_text = ocr.ocr("imag1.png")
print(image_text) #打印出来是一个一个切割好的字符串在列表的列表里面
# 把数据先放在一个列表里
data.append("".join(image_text[0][0]))
# 再把每张发票数据列表放入一个新列表
datalist.append(data)
print(datalist)
savedata(datalist)
def savedata(datalist):
# 通过openpyxl的workbook方法实例化了一个xls对象(就是excel文件)
xls = openpyxl.Workbook()
#通过文件对象创建一个sheet
worksheet=xls.active
# 直接添加可迭代对象(列表之类的)
worksheet.append(["机器编号","发票代码","开票人","价税合计(大写)"])
for data in datalist:
worksheet.append(data)
#跳出循环命个名字
xls.save("图像识别11.xls")
if __name__ == '__main__':
shibie()
print("执行完毕!")
"""其实也蛮简单的
实例化识别图片信息的对象
实例化裁剪图片的对象
先遍历一下文件路径 放在列表里面 然后写一下横坐标纵坐标的列表
将路径放到实例化的图片裁剪方法里面image.open(图片路径)
调用实例化的裁剪图片的对象的crop方法裁剪指定坐标图片 然后给出一个image_x对象
再通过这个image_x对象保存这张裁剪后的图片 image_x.save("filename")
再通过实例化的识别图片信息对象识别截图 返回一个所有全是字符串的列表 data_text
来个字符串拼接 "".join(全是字符串的列表)
最后每张发票的所有数据放在一个列表
再把所有含有每张发票信息的列表放在一个大列表里面 最后传递给保存数据参数 openpyxl 这个写excel模块是真的好用 直接往sheet里面写可迭代对象就行 安逸的很不用想lxml要算坐标
下载用
pip install pillow
导入 from PIL import Image
"""
# import os
# # 识别类
# from cnocr import CnOcr
# # 读取图片的类
# from PIL import Image
#
# # 实例化图片对象
# new_img=Image.open("./发票.png")
# # 坐标
# place=[186,205,347,237]
# # 通过坐标进行裁剪
# images=new_img.crop(place)
# # 裁剪成图像
# images.save("image1.png")
# # 生成识别对象
# ocr=CnOcr()
# # 通过ocr对象去识别
# image_text=ocr.ocr("image1.png")[0]
#
#
# data="".join(image_text)
# print(data)
版权声明:本文为EIOXY原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。