任务:

  • 在Win10电脑上部署COW微 信机器人;
  • 安装Ubuntu_CUDA_Acceleration版本的MinerU

关键字:

COW、Anaconda、MinerU、Model Scope、CUDA解析加速、Start-Process、Start-Job、cmdlet、自动变量与环境变量的区别、 'gbk' codec

1、下载:chatgpt-on-wechat-master.zip,并按照链接(https://waytoagi.feishu.cn/wiki/Zb4wwM7UYiTEWKkXfmzcfwxzn7b)部署,win10上微信测试OK。

win10:
 python3 -m venv  E:\chatgpt-on-wechat-master\venv  //创建一个独立的 Python 环境
 E:\chatgpt-on-wechat-master\venv\Scripts\Activate.ps1  //激活虚拟环境
 PS E:\chatgpt-on-wechat-master> python .\app.py     //前台运行 OK
  • 在 PowerShell 中,Get-Process、Start-Process和Stop-Process是用于管理进程的 cmdlet(命令行工具)。
Get-Service | Where-Object {$_.Status -eq 'Running'} //Get-Service 的输出被管道传递给 Where-Object cmdlet,用于筛选出状态为 “Running” 的服务
Get-Command  //列出所有可用的 cmdlet、函数和应用程序
Invoke-Command -ComputerName remotecomputer -ScriptBlock { Get-Process }  //在本地或远程计算机上执行命令。
Enter-PSSession -ComputerName RemoteComputer     //建立与远程计算机的交互式会话
Get-ChildItem Env:Path    //获取系统路径环境变量的值

1.1、(win10)在 PowerShell 中可以使用以下2种方法在后台运行 Python 脚本(Start-Job:nok;Start-Process:ok)

1.1.1、第1种方法 Start-Job Nok——注释掉一行代码后OK

  • 有问题:Start-Job:
  • 先是提示配置文件不存在,将使用config-template.json模板,处理方法是先cd 进入当前目录(解决 $pwd当前目录的问题:ScriptBlock {cd E:\chatgpt-on-wechat-master ; python.exe app.py} ),解决自动变量 $pwd当前目录的问题;
Start-Job -ScriptBlock {python.exe E:\chatgpt-on-wechat-master\app.py} -Name "cow"
 Get-Job   //获取当前正在运行的作业列表。
 Remove-Job  -Id 1   //删除已完成或不再需要的作业;Remove-Job : 此命令无法删除未完成的作业,请先停止该作业或使用 Force 参数。
 Stop-Job -Id 1      //停止特定 ID 的作业
 Receive-Job -Id 1   //获取作业的输出结果
异常输出:--->找不见配置文件
INFO][2024-09-10 08:41:31][config.py:266] - 配置文件不存在,将使用config-template.json模板
[ERROR][2024-09-10 08:41:31][app.py:66] - App startup failed!
[ERROR][2024-09-10 08:41:31][app.py:67] - [Errno 2] No such file or directory: './config-template.json' 
E:\chatgpt-on-wechat-master\config.py
def load_config():
    global config
    config_path = "./config.json"
    if not os.path.exists(config_path):
        logger.info("配置文件不存在,将使用config-template.json模板")
        config_path = "./config-template.json"
  • 在 PowerShell 中,$PWD是一个自动变量,表示当前工作目录的路径,但严格来说它不是传统意义上的 Windows 环境变量。在 Windows 命令提示符中没有$pwd这个表示当前目录的类似表示方式。PowerShell 中的一些自动变量与环境变量有一些相似之处,但它们的作用范围和使用方式有所不同。环境变量通常可以在系统范围内被多个程序和进程访问,而 PowerShell 的自动变量主要在 PowerShell 会话中使用
  • 这次运行弹出QR二维码,微信一扫描登录即异常(未出现:桌面微信已登录);手机微信未显示登录成功;日志出现GBK 编码报错,待解决?
Start-Job -ScriptBlock {cd E:\chatgpt-on-wechat-master ; python.exe app.py} -Name "cow" 
扫描二维码后又有报错:(这个错误是因为在尝试使用 GBK 编码时遇到了无法编码的字符)
[INFO][2024-09-10 15:45:35][finish.py:23] - [Finish] inited
[ERROR][2024-09-10 15:45:36][wechat_channel.py:135] - 'gbk' codec can't encode character '\u2580' in position 0: illegal multibyte sequence
Traceback (most recent call last):
  File "E:\chatgpt-on-wechat-master\channel\wechat\wechat_channel.py", line 121, in startup
    itchat.auto_login(
  File "E:\chatgpt-on-wechat-master\lib\itchat\components\register.py", line 38, in auto_login
    self.login(enableCmdQR=enableCmdQR, picDir=picDir, qrCallback=qrCallback,
  File "E:\chatgpt-on-wechat-master\lib\itchat\components\login.py", line 56, in login
    qrStorage = self.get_QR(enableCmdQR=enableCmdQR,
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\chatgpt-on-wechat-master\lib\itchat\components\login.py", line 132, in get_QR
    qrCallback(uuid=uuid, status='0', qrcode=qrStorage.getvalue())
  File "E:\chatgpt-on-wechat-master\channel\wechat\wechat_channel.py", line 103, in qrCallback
    qr.print_ascii(invert=True)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\qrcode\main.py", line 329, in print_ascii
    out.write(codes[pos])
UnicodeEncodeError: 'gbk' codec can't encode character '\u2580' in position 0: illegal multibyte sequence

***:排查,日志提示是在[finish.py:23] - [Finish] inited之后异常的,后面是执行wechat_channel.py代码,日志提示:wechat_channel.py:135,感觉是微信登录时收到 'gbk' codec不认识的字符  character '\u2580'  有关,关注这条提示  File "E:\chatgpt-on-wechat-master\channel\wechat\wechat_channel.py", line 103, in qrCallback

   qr.print_ascii(invert=True)

——>修改代码,注释掉qr.print_ascii(invert=True)后OK,这次日志没报错,随后记录的信息是:Wechat login success......nickname: 二所问答机器人【可能是“二所问答机器人”这几个汉字编码导致的?】。

E:\chatgpt-on-wechat-master\channel\wechat\wechat_channel.py
# 可用的二维码生成接口
def qrCallback(uuid, status, qrcode):
    # logger.debug("qrCallback: {} {}".format(uuid,status))
        qr.make(fit=True)
#        qr.print_ascii(invert=True)
日志:
[INFO][2024-09-10 15:35:54][finish.py:23] - [Finish] inited
[INFO][2024-09-10 15:36:13][wechat_channel.py:131] - Wechat login success, user_id: @2d0d30ae51c01781a4c9798caaca660a8e6a1d0e87e1d5f4efdbef353cf9a881, nickname: 二所问答机器人
[INFO][2024-09-10 15:36:49][bridge.py:68] - create bot chatGPT for chat

已在github提交ISSUES,查看已优化,添加except UnicodeEncodeError处理(Handle ASCII QR code print error on Windows by 6vision · Pull Request #2298 · zhayujie/chatgpt-on-wechat (github.com)

channel/wechat/wechat_channel.py
import sys
     qr.print_ascii(invert=True)
        try:
            qr.print_ascii(invert=True)
        except UnicodeEncodeError:
            print("ASCII QR code printing failed due to encoding issues.")
  • qrCallback(uuid, status, qrcode)这个函数是作为微信登录的二维码回调函数。当微信登录过程中生成二维码时,这个函数会被调用。它的主要功能是显示二维码、提供可扫描的二维码链接,并以 ASCII 艺术形式打印二维码。

1.1.2、第2种方法 Start-Process OK

Start-Process   python.exe -ArgumentList "E:\chatgpt-on-wechat-master\app.py" -WindowStyle Hidden
 PS E:\chatgpt-on-wechat-master> Get-Process python
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    257      35   704764      94604       2.42   9288   1 python
PS E:\chatgpt-on-wechat-master> Stop-Process -Id 9288
  • venv\Scripts\Activate.ps1用于激活 Python 虚拟环境。以下是主要内容的总结:
  • 定义了一些函数,包括deactivate用于取消激活虚拟环境,Get - PyVenvConfig用于获取虚拟环境配置信息。
  • 通过Start - Process启动脚本时,会根据参数设置确定虚拟环境的目录VenvDir和提示符Prompt。
  • 取消激活任何当前活跃的虚拟环境,并设置环境变量VIRTUAL_ENV,修改提示符,清除PYTHONHOME,将虚拟环境添加到PATH中。

1.2、Ubuntu下运行OK。

root@atc:/home/chatgpt-on-wechat#  python3 -m venv  /home/chatgpt-on-wechat/venv
root@atc:/home/chatgpt-on-wechat#  source /home/chatgpt-on-wechat/venv/bin/activate
(venv) root@atc:/home/chatgpt-on-wechat# python app.py 
[INIT] load config: {'channel_type': 'wx', 'model': 'gpt-4o', 'open_ai_api_key': 'sky*****key', 'open_ai_api_base': 'http://127.0.0.1:5000/qwen'
Starting Flask server in a separate thread...
Flask server started.
[INFO][2024-09-09 04:16:49][bridge.py:68] - create bot chatGPT for chat
 * Serving Flask app 'plugins.FreeAI.freeAi'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.31.2:5000
/home/chatgpt-on-wechat/config.json
  "channel_type": "wx",
  "model": "gpt-4o",
  "open_ai_api_key": "sky-key",
  "open_ai_api_base": "http://127.0.0.1:5000/qwen",
......
/home/chatgpt-on-wechat/plugins/FreeAI/config.json
 "qwen_cookie": "cna=YF..H/wOB....do......

2、免费使用Qwen2.5模型教程——测试OK

git clone https://gitcode.com/qq_72894085/FreeAI.git
cd FreeAI && pip install -r requirements.txt

3、(OK!)安装Ubuntu_CUDA_Acceleration版本的MinerU,先安装nvidia驱动

wget -U NoSuchBrowser/1.0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
bash Anaconda3-2024.06-1-Linux-x86_64.sh    //最后一步输入yes,关闭终端重新打开
conda create -n MinerU python=3.10   //conda environments:/root/anaconda3/envs/MinerU ; 添加conda命令目录到path环境变量
conda activate MinerU
# conda info
pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com -i https://pypi.tuna.tsinghua.edu.cn/simple
(MinerU) root@atc:~# magic-pdf --version
magic-pdf, version 0.7.1   //如果版本号小于0.7.0,请到issue中向我们反馈
  • 下载模型,利用Git lsf下载。模型文件夹的结构包含了不同组件的配置文件和权重文件
git lfs install
git lfs clone https://www.modelscope.cn/opendatalab/PDF-Extract-Kit.git
(MinerU) root@atc:~/PDF-Extract-Kit# ll
drwxr-xr-x  9 root root 4096 Sep  9 01:34 .git/
-rw-r--r--  1 root root 1700 Sep  9 01:24 .gitattributes
drwxr-xr-x  2 root root 4096 Sep  9 01:24 .idea/
drwxr-xr-x  6 root root 4096 Sep  9 01:24 models/
-rw-r--r--  1 root root  700 Sep  9 01:24 README.md

将 'models' 目录移动到具有较大磁盘空间的目录中,最好是在固态硬盘(SSD)上。 此外在(这里~是conda create -n MinerU的家目录) ~/magic-pdf.json里修改模型的目录指向最终的模型存放位置,否则会报模型无法加载的错误。

  • 第一次运行前的配置
wget https://gitee.com/myhloli/MinerU/raw/master/magic-pdf.template.json
cp magic-pdf.template.json ~/magic-pdf.json
编辑magic-pdf.json文件并配置"models-dir"为
{
  "models-dir": "/root/PDF-Extract-Kit/models"
}
  • 第一次运行:OK!
wget https://gitee.com/myhloli/MinerU/raw/master/demo/small_ocr.pdf
magic-pdf -p small_ocr.pdf
CPU解析速度指标:layout detection cost: 13.93    mfr time: 2.23
  • 测试CUDA加速(显卡显存大于等于8G,可以进行以下流程,测试CUDA解析加速效果),通常情况下,layout detection costmfr time提速10倍以上。

修改【用户目录】中配置文件magic-pdf.json中"device-mode"的值

{
  "device-mode":"cuda"
}
运行以下命令测试cuda加速效果
magic-pdf -p small_ocr.pdf
CUDA解析加速效果  ocr cost: 8.09    layout detection cost: 1.53   mfr time: 0.71

*:执行magic-pdf命令需在Conda环境“MinerU”(conda activate MinerU/conda deactivate);Conda 基础环境是 “base”

列出当前系统中所有的 Conda 环境及其路径信息
(base) root@atc:~# conda env list
# conda environments:
base                  *  /root/anaconda3
MinerU                   /root/anaconda3/envs/MinerU
(base) root@atc:~# conda info --envs
# conda environments:
base                  *  /root/anaconda3
MinerU                   /root/anaconda3/envs/MinerU