omniparser v2 本地部署及制作docker鏡像(20250715)

關于 omniparser v2 本地部署,網上資料不算多,尤其是對于土薔內用戶,還是有些坑的。

1、安裝步驟

可參考兩個CSDN博客:

(1)大模型實戰 - ‘OmniParser-V2本地部署安裝??鏈接

(2)微軟開源神器OmniParser-v2.0本地部署教程??鏈接

2、排錯

(1)缺 microsoft/Florence-2-base 或其他的一些模型權重,都可以去 modelscope 下載。網站上有下載命令。

(2)提示:

To use Transformers in an offline or firewalled environment requires the downloaded and cached files ahead of time.

根據官方?文檔?說明

修改 util/utils.py 文件中

processor = AutoProcessor.from_pretrained("/home/xxxxxxx/OmniParser/microsoft/Florence-2-base", local_files_only=True,trust_remote_code=True)

主要是把 microsoft/Florence-2-base 這個模型名換成具體的文件路徑,并設置 trust_remote_code=True

(3)更換鏡像(可選)

剛才提到的文章:微軟開源神器OmniParser-v2.0本地部署教程(鏈接),其中提到更換鏡像,對于不熟悉的人來說,可能不知道作者在說什么。這里補充:

其實是更換huggingface鏡像服務器:

位置:transformers/constants.py

(例如:~/.local/lib/python3.10/site-packages/transformers/constants.py)

位置:huggingface_hub/constants.py

(例如:~/.local/lib/python3.10/site-packages/huggingface_hub/constants.py)

(4)錯誤:

Please check your internet connection. This can happen if your antivirus software blocks the download of this file. You can install manually by following these steps:

1. Download this file: https://cdn-media.huggingface.co/frpc-gradio-0.3/frpc_linux_arm64

2. Rename the downloaded file to: frpc_linux_arm64_v0.3

3. Move the file to this location: /home/xxxxxx/miniconda3/envs/omni/lib/python3.12/site-packages/gradio

gitee上有 frpc_linux_arm64 這個文件,可以去下載。然后按照提示改名、移動位置、增加權限:

chmod +x /home/xxxx/miniconda3/envs/omni/lib/python3.12/site-packages/gradio/frpc_linux_arm64_v0.3

(5)提示:

TypeError: argument of type 'bool' is not iterable

Could not create share link. Please check your internet connection or our status page: https://status.gradio.app.

改 gradio_demo.py 文件的下面一行代碼

demo.launch(share=False, server_port=7861, server_name='0.0.0.0')

設置share=False

(6)提示:

Florence2ForConditionalGeneration.forward() got an unexpected keyword argument 'images'

定位 util/utils.py 文件中

model = AutoModelForCausalLM.from_pretrained(model_name_or_path, torch_dtype=torch.float32, trust_remote_code=True)

前面加一句:

model_name_or_path="/home/xxxxxx/OmniParser/microsoft/Florence-2-base-ft"

因為前面代碼有默認設置:

model_name_or_path="Salesforce/blip2-opt-2.7b"

3、構建 docker 鏡像

(1)先用豆包將 gradio_demo.py 改成接收 http 請求的服務器。

from typing import Optional
import base64
import io
import os
from flask import Flask, request, jsonify
from PIL import Image
import numpy as np
import torch
from util.utils import check_ocr_box, get_yolo_model, get_caption_model_processor, get_som_labeled_imgapp = Flask(__name__)yolo_model = get_yolo_model(model_path='weights/icon_detect/model.pt')
caption_model_processor = get_caption_model_processor(model_name="florence2", model_name_or_path="weights/icon_caption_florence")
# caption_model_processor = get_caption_model_processor(model_name="blip2", model_name_or_path="weights/icon_caption_blip2")DEVICE = torch.device('cuda')def process(image_input,box_threshold,iou_threshold,use_paddleocr,imgsz
) -> Optional[Image.Image]:box_overlay_ratio = image_input.size[0] / 3200draw_bbox_config = {'text_scale': 0.8 * box_overlay_ratio,'text_thickness': max(int(2 * box_overlay_ratio), 1),'text_padding': max(int(3 * box_overlay_ratio), 1),'thickness': max(int(3 * box_overlay_ratio), 1),}ocr_bbox_rslt, is_goal_filtered = check_ocr_box(image_input, display_img=False, output_bb_format='xyxy',goal_filtering=None, easyocr_args={'paragraph': False,'text_threshold': 0.9},use_paddleocr=use_paddleocr)text, ocr_bbox = ocr_bbox_rsltdino_labled_img, label_coordinates, parsed_content_list = get_som_labeled_img(image_input, yolo_model,BOX_TRESHOLD=box_threshold,output_coord_in_ratio=True,ocr_bbox=ocr_bbox,draw_bbox_config=draw_bbox_config,caption_model_processor=caption_model_processor,ocr_text=text,iou_threshold=iou_threshold,imgsz=imgsz)image = Image.open(io.BytesIO(base64.b64decode(dino_labled_img)))print('finish processing')parsed_content_list = '\n'.join([f'icon {i}: ' + str(v) for i, v in enumerate(parsed_content_list)])return image, str(parsed_content_list)@app.route('/process_image', methods=['POST'])
def process_image():try:# 獲取圖像數據file = request.files['image']image = Image.open(file.stream)# 獲取參數box_threshold = float(request.form.get('box_threshold', 0.05))iou_threshold = float(request.form.get('iou_threshold', 0.1))use_paddleocr = bool(request.form.get('use_paddleocr', True))imgsz = int(request.form.get('imgsz', 640))# 處理圖像processed_image, parsed_content = process(image, box_threshold, iou_threshold, use_paddleocr, imgsz)# 將處理后的圖像轉換為 base64 編碼buffered = io.BytesIO()processed_image.save(buffered, format="PNG")img_str = base64.b64encode(buffered.getvalue()).decode()# 返回結果return jsonify({'image': img_str,'parsed_content': parsed_content})except Exception as e:return jsonify({'error': str(e)}), 500if __name__ == '__main__':app.run(host='0.0.0.0', port=7861)

可以運行測試代碼:

curl -X POST \-F "image=@path/to/your/image.jpg" \-F "box_threshold=0.05" \-F "iou_threshold=0.1" \-F "use_paddleocr=true" \-F "imgsz=640" \http://localhost:7861/process_image

(2)創建 dockerfile (放在 omniparser 文件夾下)

# 使用 Python 3.12 作為基礎鏡像
FROM python:3.12-slim# 設置工作目錄
WORKDIR /app# 安裝系統依賴
RUN apt-get update && apt-get install -y \git \curl \wget \unzip \&& rm -rf /var/lib/apt/lists/*# 復制項目文件
COPY . /app# 安裝 Python 依賴
RUN pip install --no-cache-dir -r requirements.txt# 解壓權重文件(如果需要)
RUN if [ -f "omniparse_weights.zip" ]; then unzip omniparse_weights.zip -d weights; fi# 暴露應用端口(根據實際應用修改)
EXPOSE 7861 # 設置環境變量(根據需要添加)
ENV PYTHONPATH="/app:$PYTHONPATH"# 定義啟動命令(根據實際應用修改)
CMD ["python", "flask_demo.py"]

(3)運行docker可能需要設置鏡像

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.xuanyuan.me/"]
}
EOF

重啟 Docker 服務:

sudo systemctl daemon-reload
sudo systemctl restart docker

測試一下:

docker run hello-world

(4)構建 docker 鏡像

# 構建鏡像
docker build -t omniparser:latest .# 運行容器(前臺模式)
docker run -it --rm -p 7861:7861 -p 5000:5000 omniparser:latest# 或使用后臺模式
docker run -d -p 7861:7861 --name omniparser omniparser:latest

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89138.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89138.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自己寫個 `rsync` + `fswatch` 實時增量同步腳本,干掉 Cursor AI、Sublime Text 的SFTP等 插件!

自己寫個 rsync fswatch 實時增量同步腳本&#xff0c;干掉 Cursor AI、Sublime Text 的 SFTP等 插件&#xff01; 作為一個碼農&#xff0c;我最頭疼的事情之一就是編輯器同步代碼到服務器這塊。用過各種各樣的sftp、rsync插件&#xff0c;感覺不好用。。 我琢磨著&#xff1…

linux中at命令的常用用法。

Linux 中 at 命令用于安排一次性定時任務&#xff0c;需要用到在某個時間只需要執行一次的命令的時候&#xff0c;可以使用at 1&#xff1a;安裝at # Debian/Ubuntu sudo apt install at# CentOS/RHEL sudo yum install at2&#xff1a;啟動at sudo systemctl start atd # 啟…

【安卓筆記】RxJava的使用+修改功能+搭配retrofit+RxView防快速點擊

0. 環境&#xff1a; 電腦&#xff1a;Windows10 Android Studio: 2024.3.2 編程語言: Java Gradle version&#xff1a;8.11.1 Compile Sdk Version&#xff1a;35 Java 版本&#xff1a;Java11 1. 介紹RxJava GitHub開源地址&#xff1a;https://github.com/Reactive…

Windows 下原生使用 claude code + Kimi K2

搞定了kimi k2 claude code在windows下原生使用 Windows下使用claude code的障礙是shell環境&#xff08;命令行&#xff09;&#xff0c;非posix風格shell無法正常讓claude code讀取到url和key, 導致無法使用。解決問題的本質是使用符合posix風格的shell環境&#xff0c;我們…

Leetcode Easy題小解(C++語言描述)1

Leetcode Easy題小解&#xff08;C語言描述&#xff09; 相交鏈表 給你兩個單鏈表的頭節點 headA 和 headB &#xff0c;請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表不存在相交節點&#xff0c;返回 null 。 圖示兩個鏈表在節點 c1 開始相交**&#xff1a;**題目數據…

EP01:【NLP 第二彈】自然語言處理概述

一、NLP通向智能之路 1.1 圖靈測試 1.1.1 提出背景 由計算機科學家阿蘭?圖靈于 1950 年提出&#xff0c;是早期衡量機器智能水平的重要概念。 1.1.2 提出目的 判斷機器是否能表現出與人類相當的智能行為。 1.1.3 測試原理 場景設定&#xff1a;測試中存在一位人類測試者&#…

Ansible 查看PostgreSQL的版本

Ansible的基礎知識就不說了直接貼劇本- name: Check PostgreSQL versionhosts: db_serversbecome: yesvars:ansible_python_interpreter: /usr/bin/python3db_name: postgresdb_user: postgresdb_password: your_passwordtasks:- name: Install psycopg2ansible.builtin.packag…

【視覺SLAM筆記】第9章 后端1

一、理論1. 狀態估計的概率解釋我們來深入探討一下視覺SLAM中狀態估計的概率解釋。這可以說是理解現代SLAM算法&#xff08;尤其是后端優化&#xff09;的基石1. 問題的核心&#xff1a;不確定性SLAM&#xff08;同步定位與建圖&#xff09;的本質是在一個未知環境中&#xff0…

(數據結構)復雜度

基本概念說明 數據結構 定義&#xff1a;數據結構(Data Structure)是計算機存儲、組織數據的方式&#xff0c;指相互之間存在?種或多種特定關系的數據元素的集合。沒有?種單?的數據結構對所有用途都有用&#xff08;要考慮適配、效率問題&#xff0c;在不同情況下使用合適的…

玩轉Docker | 使用Docker部署bender個人導航頁工具

玩轉Docker | 使用Docker部署bender個人導航頁工具 前言 一、bender介紹 Bender 簡介 Bender 的主要特點 二、系統要求 環境要求 環境檢查 Docker版本檢查 檢查操作系統版本 三、部署bender服務 下載bender鏡像 編輯部署文件 創建容器 檢查容器狀態 檢查服務端口 安全設置 四、…

解決了困擾我的upload靶場無法解析phtml等后綴的問題

本文章為解決困擾我的 upload 靶場無法解析 phtml 問題 ? 這個問題直接讓我過不了Upload-Pass-03這一關&#xff0c;一直卡著。 ? 痛太痛了 &#xff0c;為什么無法解析上傳之后的 phtml 后綴文件&#xff01;這塊兒折磨了博主一天多&#xff0c;太不容易了&#xff0c;查找…

Leetcode百題斬-二分搜索

二分搜索也是一個很有趣的專題&#xff0c;被做過的題中&#xff0c;剛好一個Easy&#xff0c;一個Medium和一個Hard&#xff0c;剛好可以看看&#xff0c;二分搜索的三個難度等級都是啥樣的。 124. Binary Tree Maximum Path Sum[Hard]&#xff08;詳見二叉樹專題&#xff09;…

【IDEA】格式化代碼工具配置

格式化代碼快捷鍵&#xff1a; CtrlAltL格式代碼的時候不會再方法名與參數中間添加空格默認不勾選的情況下&#xff1a;代碼樣例&#xff1a;勾選之后的樣例&#xff1a;選擇不勾選&#xff0c;IDEA默認情況下就是不勾選的狀態忽略加載文件有些非必要加載到開發工具中的文件我們…

驅動開發(3)|rk356x驅動GPIO基礎應用之點亮led燈

點亮LED燈看似是一個基礎的操作&#xff0c;但實際上&#xff0c;許多高級應用也依賴于高低電平的切換。例如&#xff0c;脈沖寬度調制&#xff08;PWM&#xff09;信號可以用來精確控制電機的轉速&#xff0c;通過改變脈沖的頻率和占空比&#xff0c;實現對電機的精確調節&…

手動搭建PHP環境:步步為營,解鎖Web開發

目錄一、引言二、準備工作2.1 明確所需軟件2.2 下載軟件三、Windows 系統搭建步驟3.1 安裝 Apache 服務器3.2 安裝 PHP3.3 集成 Apache 與 PHP3.4 安裝 MySQL3.5 配置 PHP 連接 MySQL四、Linux 系統搭建步驟&#xff08;以 Ubuntu 為例&#xff09;4.1 更新系統4.2 安裝 Apache…

DrissionPage:一款讓網頁自動化更簡單的 Python 庫

在網頁自動化領域&#xff0c;Selenium 和 Playwright 早已是開發者耳熟能詳的工具。但今天要給大家介紹一款更輕量、更易用的 Python 庫 ——DrissionPage。它以 "融合 selenium 和 requests 優勢" 為核心設計理念&#xff0c;既能像 requests 一樣高效處理靜態網頁…

理解Grafana中`X-Scope-OrgID`的作用與配置

X-Scope-OrgID的作用 該HTTP Header用于標識Loki日志數據的所屬租戶&#xff08;組織&#xff09;。在多租戶模式下&#xff0c;Loki通過此Header隔離不同團隊或用戶的數據&#xff0c;確保查詢和存儲的獨立性。數據隔離&#xff1a; 租戶A的日志標記為X-Scope-OrgID: team-a&a…

【PycharmPyqt designer桌面程序設計】

在 main.py 中調用 Qt Designer 生成的 windows.py&#xff08;假設它是 PySide2 版&#xff09;。 只要把兩個文件放在同一目錄即可直接運行。 ──────────────────── 1?? windows.py&#xff08;Qt Designer 生成&#xff0c;已轉碼&#xff09; # -*-…

Unity Android Logcat插件 輸出日志中文亂碼解決

背景之前安卓真機調試看日志&#xff0c;一直用的是Android Studio自帶的adb命令進行看日志&#xff0c;不太方便&#xff0c;改用Unity自帶的安卓日志插件時&#xff0c;存在中文日志亂碼問題。插件安裝基于Unity6000.1.11版本&#xff1a;Window -> Package Management -&…

Halcon雙相機單標定板標定實現拼圖

1.Halcon圖像拼接算法在之前的文章里也寫過&#xff0c;主要是硬拼接和特征點拼接兩種方式&#xff0c;今天增加另一種拼接圖像的方式。應用場景是多個相機聯合一起拍大尺寸的物體&#xff0c;并且相機視野之間存在重疊區域。通過在同一個標定板上面標定&#xff0c;計算兩個相…