使用Python调用ocr.space API无报错但不打印内容的问题排查
解决OCR.space API调用后无打印输出的问题
咱们来一步步拆解你的代码问题,以及对应的修复方案:
问题根源
- 调用的函数无打印逻辑:你运行的
ocr_space_file函数只是把API返回的内容解码成字符串后返回,但你没有对这个返回值做任何打印操作,自然看不到输出。 - 未使用的函数存在错误:你的
ocr_space_url函数里有明显问题——里面的r变量根本没定义(这个函数甚至没发送请求),而且你也没调用这个函数,所以它里面的打印代码完全不会执行。
修复方案
我们可以修改ocr_space_file函数,让它返回解析后的JSON对象,然后在调用后处理结果并打印识别文本,同时增加错误处理避免崩溃:
import requests import json def ocr_space_file(filename, overlay=False, api_key='2fe3ae129e88957', language='eng'): """ OCR.space API request with local file. Python3.5 - not tested on 2.7 :param filename: Your file path & name. :param overlay: Is OCR.space overlay required in your response. Defaults to False. :param api_key: Your API key, defaults to the provided one. :param language: Language code to be used in OCR. Defaults to 'eng'. :return: Parsed JSON result. """ payload = {'isOverlayRequired': overlay, 'apikey': api_key, 'language': language, } with open(filename, 'rb') as f: r = requests.post('https://api.ocr.space/parse/image', files={filename: f}, data=payload, ) # 把返回的字符串解析成JSON对象,方便后续处理 return json.loads(r.content.decode()) # 调用函数并处理返回结果 ocr_result = ocr_space_file(filename='example_image.png', language='eng') # 先检查API是否处理成功,再打印结果 if not ocr_result.get("IsErroredOnProcessing"): # 提取识别到的文本并打印 parsed_text = ocr_result["ParsedResults"][0]["ParsedText"] print("识别到的文本内容:") print(parsed_text) else: # 如果出错,打印错误信息 error_msg = ocr_result.get('ErrorMessage', '发生未知错误') print(f"识别失败:{error_msg}")
关键修改点
- 把
ocr_space_file的返回值从字符串改成了解析后的JSON对象,方便后续提取数据。 - 调用函数后增加了错误判断,避免因API调用失败(比如图片无效、API key错误)导致代码崩溃。
- 明确添加了打印识别文本的逻辑,这样就能看到输出了。
如果你需要使用URL识别图片的功能,也要修复ocr_space_url函数(补全请求逻辑),示例如下:
def ocr_space_url(url, overlay=False, api_key='2fe3ae129e88957', language='eng'): """ OCR.space API request with remote file. Python3.5 - not tested on 2.7 :param url: Image url. :param overlay: Is OCR.space overlay required in your response. Defaults to False. :param api_key: Your API key, defaults to the provided one. :param language: Language code to be used in OCR. Defaults to 'eng'. :return: Parsed JSON result. """ payload = {'url': url, 'isOverlayRequired': overlay, 'apikey': api_key, 'language': language, } # 补全POST请求逻辑 r = requests.post('https://api.ocr.space/parse/image', data=payload) return json.loads(r.content.decode()) # 调用示例(取消注释即可使用) # url_result = ocr_space_url(url='你的图片URL', language='eng') # if not url_result.get("IsErroredOnProcessing"): # print(url_result["ParsedResults"][0]["ParsedText"])
内容的提问来源于stack exchange,提问作者johnnyo1012




