前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >腾讯云OCR

腾讯云OCR

原创
作者头像
用户6841540
发布2024-12-14 10:28:07
发布2024-12-14 10:28:07
12800
代码可运行
举报
运行总次数:0
代码可运行

腾讯云OCR

1.腾讯云OCR初探

之前由于学习原因,学校内的一些纸质资料上的数据需要转换为电子档。但这些数据都是一年一个站点一个数据,然后又要取多个站点,如果按照自己手动输入得输到猴年马月。正好之前了解过ocr,知道腾讯云有相关产品,于是上官网去看了下。

想不到表格识别都更新到v3了,我当初的时候还是v2版本,那个时候识别出来都得手动复制到excel,没有自动导出功能的。现在登录后,上传对应的表格图片,就会在识别结果中表格右侧出现导出表格选项,非常方便(我本科成绩单,拿来测试一下,嘿嘿)。

python代码实现自动化

但我图片太多了,一个一个识别不太现实,最初的时候在CSDN上找到个代码,原理是将图片上传到腾讯云后,以json格式返回识别的内容,然后将这个内容保存到excel中,但这个代码有些问题,每个单元格会自动压缩。比如一个单元格内有10行数据,但只会显示一行,点进去才会恢复正常。除此之外,保存下来的excel会提示受损还是格式错误,会提示修复,否则无法正常打开,保存需要另存为其他文件。其他的ocr识别不准确的通病就不说了,这方面腾讯云做的还是挺好的。

改进

这次v3,采用比较笨的方法,用selenium模拟浏览器点击,批量上传与保存。代码如下:

代码语言:javascript
代码运行次数:0
复制
# -*- coding:utf-8 -*-
# @author:Ye Zhoubing
# @datetime:2024/10/15 19:03
# @software: PyCharm
"""
selenium+腾讯云OCR识别计算型验证码
直接从网站下载excel结果文件
todo: 下载文件的保存名,目前默认保存路径为:C:\DataDownload
"""
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
import shutil
import os
import pyautogui as ui
import pyperclip
import re
from time import sleep
​
file_dir = (r'E:\git\excel_ocr\test')   # 要上传的文件夹路径
def clear_folder(folder_path):
    # 使用shutil模块的rmtree函数删除文件夹及其内部的所有文件
    shutil.rmtree(folder_path)
​
    # 使用os模块的makedirs函数重新创建一个同名的空文件夹
    os.makedirs(folder_path)
​
# 设置保存路径
save_file = file_dir + r'\ocr_result'
if not os.path.exists(save_file):
    os.mkdir(save_file)
else:
    clear_folder(save_file)  # 清空文件夹并创建一个新的
​
def extract_number(filename):
    # 使用正则表达式提取 p 和 _ 之间的数字部分
    match = re.search(r'_p(\d+)_', filename)
    if match:
        return int(match.group(1))
    else:
        return 0
​
def file_number(filename):
    # 使用正则表达式提取括号中的数字部分
    match = re.search(r'\((\d+)\)', filename)
    if match:
        return int(match.group(1))
    else:
        return 0
def find_files(path):
    files = []
    for name in os.listdir(path):
        full_path = os.path.join(path, name)
        if os.path.isdir(full_path):
            continue
        if os.path.isfile(full_path):
            files.append(name)
    return files
​
chrome_options = webdriver.ChromeOptions()
​
chrome_options.add_argument(r'--user-data-dir=C:\Users\Lenovo\AppData\Local\Google\Chrome\User Data - bak')
# 设置默认保存路径
down_load_path = r'C:\DataDownload'
prefs = {'download.default_directory': down_load_path  # 设置默认下载路径
}
chrome_options.add_experimental_option('prefs', prefs)
​
​
# chrome_options.add_argument(r'--profile-directory=Default')
url = 'https://ocrdemo.cloud.tencent.com/?from=22812'
chromedriver_position = r'E:\git\houdunren\chromedriver-win64\chromedriver-win64\chromedriver.exe'
driver = webdriver.Chrome(options=chrome_options, service=Service(chromedriver_position)) #原先的chrome_options已弃用
driver.get(url)
​
# 点击表格识别v3
​
# 点击上传本地文件(这里会要你微信扫码登录)
# todo: 修改对应的元素位置,这里只是之前的示例
upfile_names = find_files(file_dir)
i = 0
sorted_upfile_names = sorted(upfile_names, key=extract_number)
​
sleep(3)  # 给时间缓冲
# 点击`表格v3`
result = driver.find_element(By.XPATH, r'/html/body/div[1]/div/div[2]/div/div[1]/div[2]/div[2]/ul/li[3]/ul/li[10]/a/div')
result.click()
sleep(2)
​
# 扫码登录(手动)
upfile = driver.find_element(By.XPATH, r'//*[@id="root"]/div/div[2]/div/div[3]/div/div[2]/div/div[3]/div[1]/span/span/button/span')
upfile.click()
sleep(10)  # 给10s时间扫码登录
​
# 点击`表格v3`
result = driver.find_element(By.XPATH, r'/html/body/div[1]/div/div[2]/div/div[1]/div[2]/div[2]/ul/li[3]/ul/li[10]/a/div')
result.click()
sleep(2)
​
​
for upfile_name in sorted_upfile_names:
    # 点击`上传本地文件`
    upfile = driver.find_element(By.XPATH, r'//*[@id="root"]/div/div[2]/div/div[3]/div/div[2]/div/div[3]/div[1]/span/span/button/span')
    upfile.click()
    sleep(2)
    # 使用send_keys方法上传文件
    # 写入文件
    pyperclip.copy(file_dir + '\\' + upfile_name)   # 复制文件路径
    sleep(0.5)
​
    # 模拟按下Ctrl+V粘贴
    ui.hotkey('Ctrl', 'V')
​
    # 回车
    ui.typewrite("\n", interval=2)
    sleep(0.5)
    # 输入回车键, presses表示按的次数,按一次不会生效,有可能是执行太快,建议presses=2
    # ui.press('enter')
    # sleep(5)
​
    # # 点击识别
    # result = driver.find_element(By.XPATH,r'//*[@id="root"]/div/div[2]/div/div[4]/div/footer/button/span')
    # result.click()
​
    sleep(3)  # 给时间缓冲识别
​
    # 点击导出表格(没有这个按钮,但自己手动上传后是有的)
    result = driver.find_element(By.XPATH,r'/html/body/div[1]/div/div[2]/div/div[4]/div/div/div[2]/div/div/p/button[2]/span')
    result.click()
    print(upfile_name + "识别完成")
​

上面这串代码,会调用你chrome浏览器的默认设置(建议提前搞个备份,不然程序运行时,你自己不能用chrome),最终会将识别出的数据以excel的形式保存在C:\DataDownload目录下,这个代码还是可以进行优化的,比如提升速度,用post方法直接跟服务器交互,也能大大的提高效率。奈何本人水平有限,只能靠别的大佬的代码混混日子,自己写的基本都是能用就行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 腾讯云OCR
    • 1.腾讯云OCR初探
    • python代码实现自动化
      • 改进
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档