1.作者介绍
白怡宁,女,西安工程大学电子信息学院,2025级研究生
研究方向:服装图像生成
电子邮件:1378664662@qq.com
郭政,男,西安工程大学电子信息学院,2025级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1225301905@qq.com
2.算法介绍
2.1 什么是华为智能云API?
华为智能云API是华为云提供的应用程序编程接口,让开发者可以通过代码直接调用华为云的各种AI能力,而无需从零开始开发复杂的算法模型。
以本项目使用的手写图片识别 API为例,开发者只需上传图片,API就能自动识别其中的手写文字并返回结果。
2.2 什么是图像识别?
图像识别 是计算机视觉的核心技术,指利用算法对采集的图像进行预处理 、特征提取 和分类匹配 ,从而使计算机能够自动分析与理解图像中的内容。可以识别出画面中的物体、文字等信息,广泛应用于安防监控 、医疗影像分析 、手机拍照搜索等场景,是实现智能化感知的关键技术。
2.3 图像识别的原理?
图像识别的核心流程可分为四步:
1.图像预处理:对图像进行去噪、缩放等"修整",以降低干扰。
2.特征提取:将像素信息转化为数值特征。
3.特征选择:筛选出最有代表性的特征,剔除冗余信息。
4.分类匹配:利用特征进行判断(如归类为"好"),并输出置信度。

3 API获取
1.浏览器搜索"华为云官网":

2.登录华为云官网,完成实名认证:

3.搜索"文字识别 OCR "→ 进入控制台 → 开通"手写文字识别"服务:

4.在"我的凭证 "页面获取 AK (Access Key ID)和 SK(Secret Access Key):





注意:AK/SK 是密钥 ,妥善保存,不要上传到公开代码仓库。
4.代码实现
完整代码的详细解释如下所示。
import base64
import os
import sys
========== 彻底禁用代理(底层方法) ==========
1. 删除所有代理环境变量
for key in ['HTTP_PROXY', 'HTTPS_PROXY', 'http_proxy', 'https_proxy']:
os.environ.pop(key, None)
2. 直接修改 socket 创建方式,绕过代理
import socket
original_create_connection = socket.create_connection
def patched_create_connection(address, timeout=None, source_address=None):
"""绕过代理,直接连接"""
return original_create_connection(address, timeout, source_address)
socket.create_connection = patched_create_connection
3. 在导入 requests 之前设置
import urllib3
urllib3.disable_warnings()
4. 现在导入华为云SDK
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkocr.v1.region.ocr_region import OcrRegion
from huaweicloudsdkocr.v1 import *
===================================================
========== 你的AK和SK ==========
AK = "HPUARCZSDVPJDMNILUVC"
SK = "TGRhErbXcYENMx3TPiEr5SkWkNW14vYNw7olIPOf"
==================================
def recognize_handwriting(image_path):
"""识别手写图片"""
检查图片是否存在
if not os.path.exists(image_path):
print(f"错误:找不到图片文件 '{image_path}'")
print(f"当前工作目录: {os.getcwd()}")
return None
try:
1. 认证
credentials = BasicCredentials(ak=AK, sk=SK)
2. 创建客户端
client = OcrClient.new_builder() \
.with_credentials(credentials) \
.with_region(OcrRegion.value_of("cn-north-4")) \
.build()
3. 读取图片并编码
with open(image_path, "rb") as image_file:
image_base64 = base64.b64encode(image_file.read()).decode("utf-8")
4. 构造请求
request = RecognizeHandwritingRequest()
request.body = HandwritingRequestBody()
request.body.image = image_base64
5. 调用API
response = client.recognize_handwriting(request)
6. 打印结果
print("\n" + "="*50)
print("识别结果:")
print("="*50)
result = response.result
if result and hasattr(result, 'words_block_list'):
for block in result.words_block_list:
print(f"识别文字: {block.words}")
if hasattr(block, 'confidence'):
print(f"置信度: {block.confidence}")
print("-"*30)
else:
print(f"识别结果: {result}")
return result
except Exception as e:
print(f"调用失败: {e}")
import traceback
traceback.print_exc()
return None
========== 主程序 ==========
if name == "main":
print("="*50)
print("手写文字识别程序")
print("="*50)
print(f"当前工作目录: {os.getcwd()}")
print(
列出当前目录下的图片文件
image_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff')
files = [f for f in os.listdir('.') if f.lower().endswith(image_extensions)]
if files:
print("当前目录下的图片文件:")
for i, f in enumerate(files, 1):
print(f" {i}. {f}")
print()
让用户输入图片路径
while True:
image_input = input("请输入图片路径或文件名(输入 q 退出): ").strip()
if image_input.lower() == 'q':
print("程序退出")
break
去除可能的引号
image_input = image_input.strip('"').strip("'")
识别
print(f"\n正在识别图片: {image_input}")
result = recognize_handwriting(image_input)
if result:
print("\n✅ 识别完成!")
else:
print("\n❌ 识别失败")
print("\n" + "-"*50 + "\n")
右键ocr_demo.py 文件,点击"在终端中运行 Python 文件",结果如图所示。

在终端显示当前目录下的图片文件。
运行结果如下:
①识别一串数字,结果如图所示。




②识别单个数字,结果如图所示。


③识别一串字母,结果如图所示。


④识别字母+数字的组合,结果如图所示。


⑤识别单个汉字,结果如图所示。


⑥识别短语,结果如图所示。


⑦识别短语,结果如图所示。
识别短句,并且需要识别的图片不在当前工作目录,结果如图所示。


不能只输入需要识别图片的名称,应该正确输入需要识别图片的路径和名称,成功运行的结果如图所示。

5 问题分析
在运行过程中,出现调用失败导致识别失败的问题。


这是由于代理错误!!!,解决方法如下:
重新运行python ocr_demo.py 文件,成功运行的结果如图所示。


