You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OCR算术序列计算项目遇int转换报错ValueError: invalid literal for int()

问题根源
  1. OCR识别将半角负号-识别为了全角长破折号—,Python内置的int()转换函数仅支持半角减号作为负数标识,因此直接转换会报错。
  2. 现有正则匹配规则、公差计算逻辑、语法均存在错误,即使解决符号问题也无法得到正确结果。
修复方案

按以下步骤修改代码即可:

  • 新增文本预处理步骤,将识别结果中的全角长破折号统一替换为半角减号
  • 修正正则匹配规则,适配所有整数场景
  • 修正公差计算逻辑,符合等差数列定义
  • 修正乘法语法错误,Python中乘法需显式写*运算符

如果不需要额外依赖numpy,仅修改核心逻辑的代码如下:

import cv2
import pyautogui as auto
import time
import pytesseract
import re

time.sleep(1)

# take screenshot using pyautogui
image = auto.screenshot("image2.png", region=(420,450, 600, 100))

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

img = cv2.imread("image2.png")

text = pytesseract.image_to_string(img)
# 关键修复:将全角长破折号替换为可识别的半角减号
text = text.replace("—", "-")

print(text[0:67])

# 修正正则:匹配所有正负整数
pattern = r"-?\d+"
num_list = re.findall(pattern, text)
# 统一转换为整数
num_list = list(map(int, num_list))

An = num_list[0]
A1 = num_list[1]
A2 = num_list[2]

# 等差数列公差直接为后项减前项,无需判断大小
d = A2 - A1

# 修正乘法语法错误
Answer = A1 + (An - 1) * d

print(Answer)

cv2.imshow("Img", img)
cv2.waitKey(0)
额外优化建议
  • 可添加长度校验:判断num_list的长度是否至少为3,避免OCR识别异常时索引报错
  • 可添加二值化、降噪等图像预处理步骤,提升OCR识别准确率
  • 避免重复调用re.findall,复用第一次返回的匹配结果即可减少不必要的计算

内容的提问来源于stack exchange,提问作者N1cmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:00