华为LAB实验室-书本识别

本文介绍如何使用华为云图像识别服务进行书本主体识别。通过实验,学员将学习到如何利用Python SDK调用图像标签功能,包括开通服务、获取AK/SK、项目ID,以及执行图像标签任务并处理结果。

各位好,我是乾颐堂大堂子。领取完整实战指南可以私信我,关键词:实战指南

0.1-实验简介

*图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术。图像识别以开放API(Application Programming Interface,应用程序编程接口方式提供给用户,用户通过实时访问和调用API获取推理结果,帮助用户自动处理关键数据,打造智能化业务系统,提升业务效率。

*图像识别(Image Recognition),基于深度学习技术,可准确识别图像中的视觉内容,提供多种物体、场景和概念标签,具备目标检测和属性识别等能力,帮助客户准确识别和理解图像内容。

*图像识别-主体识别服务是利用华为云图像识别后台算法来检测用户传入图像中的主体内容并返回图片中主体的坐标信息。

*图像识别-图像标签服务,自然图像的语义内容非常丰富,一个图像包含多个标签内容,图像标签服务准确识别自然图片中数百种场景、上千种通用物体及其属性,让智能相册管理、照片检索和分类、基于场景内容或者物体的广告推荐等功能更加直观。使用该功能接口时,用户发送图像,后台算法返回图片标签内容及相应置信度。

*图像识别服务通常可以通过以下两种方式进行调用,一种是调用华为云提供的SDK,另一种是调用相应服务的API接口。用户首先需要在华为云“EI企业智能>人工智能>图像识别Image”页面开通相关服务(服务只需要开通一次即可,后面使用时无需再申请)。其次,利用API接口的开发者可以在华为云提供的API Explorer对不同服务的接口进行调测,同时API Explorer上提供有多种编程语言的SDK代码示例可供开发者参考使用。

0.2-实验目的

本实验主要介绍了使用华为云图像识别服务,通过本实验学员将了解如何利用华为云的图像识别服务进行图像标签功能。目前华为云有提供基于Python语言的图像识别SDK,本实验将指导学员理解和掌握如何使用Python进行图像标签业务的开发方法和技巧。

1-登录华为云开通图像识别服务开通

图像识别服务:登录图像识别管理控制台(开通一次,永久开通)(​https://console.huaweicloud.com/image

明白了!你的意思是: ✅ **保留使用 `huaweicloud` SDK**(华为云 OBS SDK) ❌ **但不使用 `flask_caching` 模块** --- 我们将使用 `huaweicloud` SDK 访问 OBS,但 **不使用 Flask-Caching 缓存**,而是使用一个简单的内存字典来缓存 JSONL 数据和图片数据。 --- ## ✅ 一、安装依赖 ```bash pip install flask huaweicloud pillow ``` --- ## ✅ 二、后端代码(使用 huaweicloud SDK,不使用 flask_caching) ```python # app.py from flask import Flask, request, jsonify, send_file from io import BytesIO from PIL import Image, ImageDraw, ImageFont import json import base64 from huaweicloud.sdk.core.auth.credentials import BasicCredentials from huaweicloud.sdk.obs.v1.obs_client import ObsClient app = Flask(__name__) # 使用内存字典模拟缓存 file_cache = {} image_cache = {} # 初始化华为云 OBS 客户端 credentials = BasicCredentials( ak="YOUR_AK", sk="YOUR_SK", project_id="YOUR_PROJECT_ID" ) client = ObsClient( access_key_id="YOUR_AK", secret_access_key="YOUR_SK", server="https://obs.cn-north-4.myhuaweicloud.com" ) BUCKET_NAME = "your-bucket-name" # 替换为你的桶名 @app.route("/buckets", methods=["GET"]) def list_buckets(): resp = client.list_buckets() buckets = [b.name for b in resp.body.buckets] return jsonify(buckets) @app.route("/files", methods=["GET"]) def list_files(): prefix = request.args.get("prefix", "") resp = client.list_objects(BUCKET_NAME, prefix=prefix) files = [content.key for content in resp.body.contents] return jsonify(files) @app.route("/jsonl", methods=["GET"]) def get_jsonl_data(): file_path = request.args.get("file") if file_path in file_cache: return jsonify(file_cache[file_path]) resp = client.get_object(BUCKET_NAME, file_path) lines = resp.body.read().decode("utf-8").splitlines() data = [json.loads(line) for line in lines] file_cache[file_path] = data # 缓存数据 return jsonify(data) @app.route("/image", methods=["GET"]) def get_image(): image_path = request.args.get("path") if image_path in image_cache: return send_file(BytesIO(base64.b64decode(image_cache[image_path])), mimetype="image/png") resp = client.get_object(BUCKET_NAME, image_path) img_data = resp.body.read() img = Image.open(BytesIO(img_data)) draw = ImageDraw.Draw(img) font = ImageFont.load_default() # 如果有 box 信息,绘制框框 if "box" in request.args: box = json.loads(request.args.get("box")) label = request.args.get("label") draw.rectangle(box, outline="red", width=2) draw.text((box[0], box[1]), label, fill="red", font=font) img_io = BytesIO() img.save(img_io, "PNG") encoded = base64.b64encode(img_io.getvalue()).decode("utf-8") image_cache[image_path] = encoded return send_file(BytesIO(base64.b64decode(encoded)), mimetype="image/png") if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) ``` --- ## ✅ 三、前端代码(HTML + JS) 这部分与之前保持一致,不再赘述。你可以参考前面的 `index.html` 示例代码。 --- ## ✅ 四、说明 | 模块 | 说明 | |------|------| | `huaweicloud` SDK | 用于访问 OBS,列出文件、读取文件 | | `file_cache` 字典 | 替代 `flask_caching`,缓存 JSONL 数据 | | `image_cache` 字典 | 缓存图片的 base64 数据,加快加载速度 | | `ImageDraw` | 用于在图片上绘制框框和文字 | --- ## ✅ 五、部署建议 ### 1. 启动服务 ```bash python app.py ``` ### 2. 使用 Gunicorn 部署(生产环境) ```bash pip install gunicorn gunicorn -w 4 -b 0.0.0.0:5000 app:app ``` ### 3. Nginx 反向代理配置(可选) ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; } } ``` --- ## ✅ 六、优点与限制 | 优点 | 限制 | |------|------| | 使用官方 SDK,稳定性强 | 需要安装 `huaweicloud` 包 | | 使用内存缓存,响应更快 | 不适合大规模数据缓存 | | 代码结构清晰 | 依赖华为云 AK/SK | --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值