调用华为智能云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 文件,成功运行的结果如图所示。

相关推荐
郝学胜-神的一滴11 分钟前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm
IvanCodes20 分钟前
Python 基础语法(五):列表与元组
python
nanawinona21 分钟前
搜索“2026年量化开发”时,先看规则是否足够清楚
人工智能·python
Deep_Kevin26 分钟前
RL-VLM-F: Reinforcement Learning from Vision Language Foundation Model Feedback
机器学习
qq_2147826127 分钟前
再见Visio,再见draw.io,又一个画图Skill
人工智能·机器学习·draw.io
倔强的石头10628 分钟前
【深度学习】词嵌入技术_从Word2Vec到现代Embedding
人工智能·深度学习·机器学习
泡茶喝茶写代码1 小时前
量化数据开发实战系列(第 25 篇):基金基础接口实战:基金列表、ETF-LOF 分类、基金概况、净值数据
java·数据库·人工智能·python·mysql
张小姐的猫1 小时前
【AI大模型接入SDK】 —— 数据管理 & 与Session模块进行联动
数据结构·数据库·c++·人工智能·python·chatgpt
troy1281 小时前
Python 进阶提升(十二):自动化测试与 DevOps 实战
python·devops