调用华为智能云API实现手写图片识别

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 文件,成功运行的结果如图所示。

相关推荐
坐吃山猪1 小时前
Python34_装饰器知识
开发语言·python·ubuntu
weixin_660096781 小时前
【无标题】
python·debugpy
小草cys1 小时前
Anaconda 的虚拟环境(envs)从默认的 C 盘迁移到其他磁盘
开发语言·python·anaconda
keineahnung23451 小时前
PyTorch SymNode 的 _is_contiguous 從何而來?──sizes_strides_impl 實作詳解
人工智能·pytorch·python·深度学习
七牛云行业应用1 小时前
MCP 服务器本地部署实战【2026】:Python/Node.js 搭建 + Claude/Cursor/TRAE
服务器·python·node.js
Web极客码1 小时前
Python Deque:构建实时滑动窗口与高性能缓存的“隐藏高手”
java·python·缓存
leon_teacher1 小时前
HarmonyOS 6 鸿蒙APP应用实战:基于 ArkUI V2 打造儿童古诗学习宝 App 从 0 到 1
学习·华为·harmonyos
钱多多_qdd1 小时前
基于mac环境,升级python环境问题解决
开发语言·python·macos
boonya1 小时前
Python 量化金融框架及技术落地方案
开发语言·python·金融