基于Ollama Python的本地多模态大模型

0,背景

最近测试Ollama,发现之前直接下载开源模型在我电脑上都跑不动的模型,居然也能运行了(AMD 7840HS核显/32GB内存),突发奇想那些多模态大模型能不能基于Python接口使用,所以决定尝试一下。

1,安装环境与模型选择

安装过程略,可以参考文章:Ollama在Windows11部署与使用QWen2模型_ollama run qwen2 "内容-CSDN博客

模型选择上,选取多模态大模型BakLLaVA 

BakLLaVA 是一款由 SkunkworksAI 与 LAION、Ontocord 和 Skunkworks OSS AI 团队合作开发的多模态语言模型,通过改进基础模型、调整训练过程、引入定制数据集及架构优化,实现了接近 GPT-4 级别的多模态语言处理能力。它在图像描述生成、语音识别和理解、自然语言问答等应用中表现出色,并且支持多种 GPU 配置,具有较强的适应性。作为开源项目,BakLLaVA 为研究人员和开发者提供了广阔的探索和改进空间。

ollama run bakllava

2,Ollama的Python接口测试

使用指令安装库

pip install ollama

然后运行下面的程序测试:

import ollama

response = ollama.chat(model='bakllava', messages=[
  {
    'role': 'user',
    'content': 'Why is the sky blue?',
  },
])

print(response['message']['content'])

能够得到返回结果

3,代码实现

(1)导入必要的库

首先,我们需要导入处理图像和与 Ollama 模型交互所需的库。

import base64
from io import BytesIO
from PIL import Image
import ollama

(2)定义图像转换函数

我们需要一个函数来将 PIL 图像转换为 Base64 编码字符串。这对于将图像数据发送给模型是必要的步骤。

# 将PIL图像转换为Base64编码字符串
def convert_to_base64(pil_image):
    buffered = BytesIO()
    # 将图像转换为RGB模式
    pil_image = pil_image.convert("RGB")
    pil_image.save(buffered, format="JPEG")
    img_str = base64.b64encode(buffered.getvalue()).decode("utf-8")
    return img_str

 (3)定义图像加载函数

该函数用于从指定路径加载图像,并将其转换为 Base64 编码字符串。

# 从指定路径加载图像并转换为Base64编码字符串
def load_image(file_path):
    pil_image = Image.open(file_path)
    return convert_to_base64(pil_image)

(4)定义与模型交互的函数

这个函数将图像和问题发送给 BakLLaVA 模型,并获取模型的回答。

# 将图像和问题发送给Ollama的bakllava模型并获取回答
def chat_with_model(image_base64, question):
    response = ollama.chat(model='bakllava', messages=[
        {
            'role': 'user',
            'content': question,
            'images': [image_base64]
        }
    ])
    return response['message']['content']

 (5)主程序逻辑

在主程序中,我们加载图像,将其转换为 Base64 编码,然后向模型提问,并打印模型的回答。

if __name__ == "__main__":
    # 图片所在地址
    file_path = "2.jpg"
    
    # 加载并转换图像
    image_b64 = load_image(file_path)
    
    # 提问
    question = "What is written in the picture, and answer the question."
    
    # 与模型对话
    answer = chat_with_model(image_b64, question)
    
    # 打印回答
    print(answer)

上传的图片其实很简单,如下

 完整程序如下:

import base64
from io import BytesIO
from PIL import Image
import ollama

# 将PIL图像转换为Base64编码字符串
def convert_to_base64(pil_image):
    buffered = BytesIO()
    # 将图像转换为RGB模式
    pil_image = pil_image.convert("RGB")
    pil_image.save(buffered, format="JPEG")
    img_str = base64.b64encode(buffered.getvalue()).decode("utf-8")
    return img_str

# 从指定路径加载图像并转换为Base64编码字符串
def load_image(file_path):
    pil_image = Image.open(file_path)
    return convert_to_base64(pil_image)

# 将图像和问题发送给Ollama的phi3模型并获取回答
def chat_with_model(image_base64, question):
    response = ollama.chat(model='bakllava', messages=[
        {
            'role': 'user',
            'content': question,
            'images': [image_base64]
        }
    ])
    return response['message']['content']

if __name__ == "__main__":
    # 图片所在地址
    file_path = "2.jpg"
    
    # 加载并转换图像
    image_b64 = load_image(file_path)
    
    # 提问
    question = "What is written in the picture,and answer the question."
    
    # 与模型对话
    answer = chat_with_model(image_b64, question)
    
    # 打印回答
    print(answer)

4,运行得到结果

### 使用Python实现基于多模态大模型的OCR技术方案 #### 方案概述 为了实现基于多模态大模型的OCR功能,可以采用类似于旷视科技提出的Vary框架[^1]。此框架能够处理更为复杂的视觉任务,如文档级别的OCR或图表理解。 #### 实现细节 通过运行特定脚本`run_qwen_vary.py`并指定参数来加载预训练好的模型以及待处理图像文件路径,即可启动OCR流程: ```bash test python vary/demo/run_qwen_vary.py --model-name /vary/model/path/ --image-file /an/image/file.png ``` 对于具体代码层面的操作,则可以通过Hugging Face提供的API接口快速构建起一个多模态的大规模语言模型实例用于执行OCR任务。下面是一个简单的例子展示如何初始化这样一个模型,并将其部署到目标设备上准备进行推理操作[^2]: ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch device = "cuda" if torch.cuda.is_available() else "cpu" tokenizer = AutoTokenizer.from_pretrained("/path/to/tokenizer") model = AutoModelForCausalLM.from_pretrained( "/home/wanglch/projects/GLM-4V/glm-4v-9b", torch_dtype=torch.float16, low_cpu_mem_usage=True, trust_remote_code=True ).to(device).eval() ``` 这段代码展示了如何利用GLM-4V这样的大型多模态模型来进行OCR工作。需要注意的是,在实际应用场景中可能还需要额外的数据预处理步骤,比如图片裁剪、旋转校正等;同时也建议针对具体的业务需求调整超参数设置以优化性能表现。 #### 应用场景拓展 除了基本的文字识别外,借助于强大的多模态能力,还可以进一步探索更多样化的应用方向,例如表格解析、手写体转换打印字体等等。掌握这些技能不仅有助于提升个人技术水平,也能为企业带来更高的价值创造可能性[^3].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sagima_sdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值