当前位置: 首页 > article >正文

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

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

step1:

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

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

step2:

观看官方使用文档:

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:

引入摄像头模块,并且时时进行推理,将模型的初步推理结果传入文本中,为后期的朗读进行预警

# 创建摄像头对象
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()

原理十分简单,让我们来看一下初步的结果:
在这里插入图片描述
在我加入翻译模块后,发现其输出结果:

'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 照片。照片截图自远程视频会议ूच意识。

存在乱码的情况,后续我将进行优化,加入其他大模型进行处理,并且在考虑时时状态下进行最优化解决.


http://www.kler.cn/a/375294.html

相关文章:

  • 快速入门:Visual Studio 中的 Docker
  • vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了
  • 12. 内存管理
  • 哈希思想及其应用
  • TMDOG的Gin学习笔记_01——初识Gin框架
  • 【数据结构】数组和向量
  • LeetCode516:最长回文子序列
  • 从0到1,用Rust轻松制作电子书
  • OpenWrt下安装Mosquitto
  • 在Java中 try catch 会影响性能吗?
  • 轻松部署自己的AI聊天助手LocalGPT并实现无公网IP远程交互
  • 包子凑数(完全背包)
  • 详解进制转换
  • windows@命令行中获取环境变量取值不展开取值(原值)
  • 大数据新视界 -- 大数据大厂都在用的数据目录管理秘籍大揭秘,附海量代码和案例
  • 青少年编程与数学 02-003 Go语言网络编程 03课题、网络编程协议
  • 代码随想录训练营Day09 | 150. 逆波兰表达式求值 - 239. 滑动窗口最大值 - 347.前 K 个高频元素
  • 从服务运营的阶段,进入到了精细化管理和智慧化运营的阶段的明厨亮早年开源了
  • ubuntu知识点滴积累
  • AI-基本概念-向量、矩阵、张量
  • 后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)
  • 学习虚幻C++开发日志——基础案例(持续更新中)
  • SpringSecurity框架(入门)
  • PostgreSQL的奥秘:表结构、TOAST与大对象
  • 网络一些相关术语
  • axios 如何取消请求