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

DIFY整合VideoLLaMA3使用图片理解

1、VideoLLaMA模型:
在通用视频理解、时间推理和长视频理解三个核心维度进行评估的过程中,VideoLLaMA 3均取得优异成绩,超越多数基线模型。
Video LLaMA 3,在图像理解上的表现也是较为出色。
在涵盖文档 / 图表 / 场景文本理解、数学推理、多图像理解和常识问答等多个维度的基准测试,如在InfoVQA中超越之前最好成绩,在MathVista数学推理任务上优势明显。
2、DIFY
DIFY就不介绍了,作为大模型流程应用,依托知识库建个RAG、做个智能体多能轻松解决。
3、如何在DIFY中引入VideoLLaMA?
这个目前还未看到解决方案,一般在本地模型使用方面OLLAMA是比较方便的形式,或者Xinference之类的模型加载服务。但VideoLLaMA并未提供任何快速兼容的方式,虽然VideoLLaMA的底层是QWen模型。

下载VideoLLaMA3 git目录之后。参考demo文件,建立一个提供API服务能力的Service接口(这种模式个人觉得并不是特别好,如果你有更好的方式,欢迎留言交流)

import sys
sys.path.append('.')

import argparse
import subprocess
from threading import Thread

from inference.interface import VideoLLaMA3GradioInterface
from inference.server import VideoLLaMA3PlainClient
import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

# 定义一个简单的函数
def greet(weburl ):
    #can use  model_client...
    #return f"Hello {name}!"
    generation_config = {
        "do_sample": True,
        "temperature": 0.6,
        "top_p": 0.9,
        "max_new_tokens": 2048
    }
    messages = []
    new_messages = []
    contents = []
    # 初始化一个空字符串来存储已生成的内容
    generated_content = ""
    #contents.append({"type": "image", "image": {"image_path": "./assets/sora.png"}})

    #weburl = "https://xxxxxxx/ImageFiles/1760501078614536192/1760501088123023360.png"
    contents.append({"type": "image", "image": {"image_path": weburl}})
    contents.append({"type": "text", "text": "What is the image content?"})
    new_messages.append({"role": "user", "content": contents})
    streamer = model_client.submit({"conversation": new_messages, "generation_config": generation_config})
    messages.append({"role": "assistant", "content": ""})
    for token in streamer:
        # 检查是否有新的内容
        if token not in generated_content:
            generated_content += token
            messages[-1]['content'] = generated_content
            #yield messages
    return generated_content

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--model-path", "--model_path", type=str, required=True)
    parser.add_argument("--server-port", "--server_port", type=int, default=16667)
    parser.add_argument("--interface-port", "--interface_port", type=int, default=9999)
    parser.add_argument("--nproc", type=int, default=1)
    args = parser.parse_args()

    server_thread = Thread(
        target=lambda: subprocess.run(
            [
                "python", "-m",
                "inference.server.plain_server",
                "--model-path", args.model_path,
                "--nproc", str(args.nproc),
                "--port", str(args.server_port),
            ]
        )
    )
    server_thread.daemon = True
    server_thread.start()

    model_client = VideoLLaMA3PlainClient(port=args.server_port)
#   API interface
    # 创建FastAPI应用
    app = FastAPI()

    # 添加CORS中间件,允许跨域请求
    app.add_middleware(
        CORSMiddleware,
        allow_origins=["*"],
        allow_credentials=True,
        allow_methods=["*"],
        allow_headers=["*"],
    )


    # 定义API端点
    @app.get("/api/greet/{name}")
    async def api_greet(name: str):
        return {"message": greet(name)}
    uvicorn.run(app, host="0.0.0.0", port=9998)

启动服务,可以使用post-man等进行接口测试,入参weburl 是一个网络图片的访问路径。
export CUDA_VISIBLE_DEVICES=0 && python ./inference/launch_fastapi.py --model-path “DAMO-NLP-SG/VideoLLaMA3-7B” --server-port 16666

在DIFY中建立一个工作流
在这里插入图片描述
通过代码执行块,接收图片URL、针对图片的问题。通过web请求得到内容,如此建立单轮会话。

import urllib3
def main(arg1: str, arg2: str) -> dict:
    url = "http://10.235.114.16:9998/api/greet/" + arg2
    http = urllib3.PoolManager()
    response = http.request('GET', url)
    if response.status == 200:
        #data = json.loads(response.data.decode('utf-8'))
        return {
        "result": response.data.decode('utf-8'),}
    else:
        return {
        "result":f"failed: {response.status}",}


看一下执行的效果:
在这里插入图片描述

{“message”:“The image contains a document written in Chinese. appears to be an exam or set of questions related technical subject, possibly electrical engineering physics. It includes multiple-choice and numerical problems.”}
详细输出了学科,知识点电力…


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

相关文章:

  • 远程访问家里电脑上部署的Stable diffusion - 免费篇
  • 部队仓储信息化手段建设:基于RFID、IWMS、RCS三大技术的仓储物流全链路效能优化方案
  • 设计模式(创建型)-抽象工厂模式
  • 【Pandas】pandas Series sparse
  • Spring boot 整合 ehcache 2.x 3.x -本地缓存以及持久化实现
  • 供应链精读:106页华为智慧供应链ISC项目建设IT蓝图规划设计方案
  • Go语言对于MySQL的基本操作
  • Linux--进程优先级
  • 如何设计一个短链系统?流程如何?
  • 云原生周刊丨CIO 洞察:Kubernetes 解锁 AI 新纪元
  • TypeScript Symbols 深度解析:在 Vue3 中的高级应用实践
  • Lora微LLAMA模型实战
  • 【Node.js入门笔记8---path 模块】
  • 如何使用 CryptoJS 实现 DES 解密
  • 支持向量机(Support Vector Machine)基础知识2
  • 深度揭秘:蓝耘 Maas 平台如何重塑深度学习格局
  • python二级每日十题(1)
  • SQLMesh 系列教程:Airbnb数据分析项目实战
  • ubuntu中的ens33网卡在ifconfig中被默认关闭了?
  • Netty基础—8.Netty实现私有协议栈一