自学内容网 自学内容网

基于NVIDIA NIM平台实现盲人过马路的demo(一)

前言:利用NVIDIA NIM平台提供的大模型进行编辑,通过llama-3.2-90b-vision-instruct模型进行初步的图片检测

在该系统的设计中,通过利用 NVIDIA 的 NIM 平台提供的大模型支持,我们使用了 llama-3.2-90b-vision-instruct 模型来进行图片检测和识别。在初步的测试中,图像通过摄像头捕获后,转换为 Base64 格式并传输给大模型进行分析,模型会返回对图片内容的描述。以下是具体步骤和细节说明:

为了实现图像数据的传输和处理,系统首先加载了基础库(如 os、requests、base64 和 cv2)以及日期和时间模块,用于图像编码、网络请求和时间戳记录。

step1:

部署大模型到本地,引用所需要的库

import os
import requests
import base64
import cv2
import time
from datetime import datetime

step2:

观看官方使用文档按照官方的指导文档,通过将图片编码成 Base64 后,构建请求负载传递给模型。需要注意的是,图片大小需控制在 180KB 以下,否则会影响传输效率。:

import requests, base64
invoke_url = ""
stream = True
with open("image.png", "rb") as f:
  image_b64 = base64.b64encode(f.read()).decode()
assert len(image_b64) < 180_000, \
  "To upload larger images, use the assets API (see docs)"
headers = {
  "Authorization": "",
  "Accept": "text/event-stream" if stream else "application/json"
}

payload = {
  "model": 'meta/llama-3.2-90b-vision-instruct',
  "messages": [
    {
      "role": "user",
      "content": f'What is in this image? <img src="data:image/png;base64,{image_b64}" />'
    }
  ],
  "max_tokens": 512,
  "temperature": 1.00,
  "top_p": 1.00,
  "stream": stream
}
response = requests.post(invoke_url, headers=headers, json=payload)
if stream:
    for line in response.iter_lines():
        if line:
            print(line.decode("utf-8"))
else:
    print(response.json())

其原理为将图片转换为base64后传入大模型进行识别,以及一系列参数

step3:

引入摄像头模块,并且时时进行推理,将模型的初步推理结果传入文本中,为后期的朗读进行预警为了达到实时检测的效果,系统引入了摄像头模块,将视频流中的每一帧传递给模型。通过 OpenCV 捕获图像,并以 PNG 格式编码。随后将编码后的图像传输给大模型处理并获得结果,将模型的初步推理结果记录在文本文件中,为后续语音朗读预留空间。

# 创建摄像头对象
cap = cv2.VideoCapture(0)  # 0 是默认摄像头索引

# 输出文件路径
output_file_path = "output.txt"


def save_text_to_file(text):
    with open(output_file_path, "a", encoding="utf-8") as f:  # 以追加模式打开文件
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 获取当前时间戳
        f.write(f"[{timestamp}] {text}\n")  # 写入时间戳和文本,换行


while True:
    ret, frame = cap.read()
    if not ret:
        print("无法获取图像")
        break

    # 将图像编码为 PNG 格式并转换为 Base64
    _, buffer = cv2.imencode('.png', frame)
    image_b64 = base64.b64encode(buffer).decode()

    # 构建请求负载,确保输入中文
    payload = {
        "model": 'meta/llama-3.2-90b-vision-instruct',
        "messages": [
            {
                "role": 'user',
                "content": f'请告诉我这张图片中有什么内容。<img src="data:image/png;base64,{image_b64}" />'
            }
        ],
        "max_tokens": 512,
        "temperature": 1.00,
        "top_p": 1.00,
        "stream": stream
    }

    # 发送请求
    response = requests.post(invoke_url, headers=headers, json=payload)

    if response.status_code == 200:
        result = response.json()
        # 根据返回的结果处理输出
        print(result)  # 可以进一步提取所需的信息

        # 获取结果中的文本内容
        if 'choices' in result and len(result['choices']) > 0:
            description = result['choices'][0]['message']['content']
            print(description)  # 打印描述

            # 保存文本到文件
            save_text_to_file(description)

    else:
        print(f"请求失败,状态码:{response.status_code}")

    time.sleep(3)  # 每秒捕获一帧

# 释放摄像头
cap.release()
cv2.destroyAllWindows()

系统通过循环捕获图像帧,并进行推理处理,将结果逐行存储到文本文件 output.txt 中。此过程每 3 秒循环一次,以确保系统资源占用不超载,并在文件中按时间戳记录推理结果。
原理十分简单,在使用摄像头扫描我自己后
让我们来看一下初步的结果:
在这里插入图片描述
在我加入翻译模块后,发现其输出结果:

'id': 'chat-51e2e604fd944de393136f7433919ad5', 'object': 'chat.completion', 'created': 1730471625, 'model': 'meta/llama-3.2-90b-vision-instruct', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': '这里有一张中年亚洲男性 frontal director 照片。照片截图自远程视频会议ूच意识。\n\n/ Ψ οδ HistogramDescriptionBlack / 97% Colorsunnedove Gray66BetaBLUE209peach29dark brown अपन Nogran8023825444098364103281213183791565308314594581053713508413533mntileyelo \n\n.', 'tool_calls': []}, 'logprobs': None, 'finish_reason': 'stop', 'stop_reason': None}], 'usage': {'prompt_tokens': 20, 'total_tokens': 99, 'completion_tokens': 79}, 'prompt_logprobs': None}
这里有一张中年亚洲男性 frontal director 照片。照片截图自远程视频会议ूच意识。

存在乱码的情况,后续我将进行优化,加入其他大模型进行处理,并且在考虑时时状态下进行最优化解决.
此问题可能源于模型在处理多语言字符集时的兼容性不足。为了解决此问题,后续计划结合其他大模型进行多语言支持优化,通过检测模型输出的质量,以达到更高的识别准确率和完整性。

后续改进方向
模型输出的优化:尝试使用其他支持多语言的大模型,或对文本结果进行后处理,去除乱码。
系统实时性增强:调试模型的响应速度,通过减少请求负载和调节图像分辨率,提升系统的实时推理能力。
数据增强与日志记录:扩展文本存储功能,提供更详细的日志记录和分类,以便于后续的分析和调优。
本项目通过图像捕获、预处理、实时推理及结果记录等一系列步骤,为智能检测和信息反馈系统的实现打下了基础。后续将持续优化模型效果,并将推理结果集成到其他模块以提供进一步的用户体验。


原文地址:https://blog.csdn.net/baidu_33751906/article/details/143442288

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!