You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中直接运行Python脚本(无需Process与Cmd)

在C#中直接运行依赖EasyOCR/OpenCV/PyODBC的Python脚本(基于Python.Runtime)

IronPython无法兼容EasyOCR这类依赖CPython C扩展的库,所以唯一可行的方案是Python.Runtime,以下是完整实现步骤和代码:

一、环境准备

  • 安装CPython 3.8~3.10版本,执行命令安装依赖:
    pip install easyocr opencv-python pyodbc
    
  • 在C#项目中安装Python.Runtime NuGet包(确保版本与你的Python大版本匹配,比如Python3.9对应Python.Runtime 3.9.x)

二、项目配置

  1. 右键C#项目 → 属性 → 生成 → 取消勾选「首选32位」(如果你的Python是64位版本)
  2. 确保Python安装目录已加入系统PATH环境变量,或者在代码中手动指定路径

三、代码实现

1. Python脚本示例(命名为ocr_db_script.py)

import easyocr
import cv2
import pyodbc
import sys

# 若出现模块找不到的问题,手动添加site-packages路径
# sys.path.append("C:/Python39/Lib/site-packages")

def process_image_and_save(image_path, db_connection_str):
    # 1. EasyOCR识别文字
    reader = easyocr.Reader(['ch_sim', 'en'])
    result = reader.readtext(image_path)
    ocr_text = '\n'.join([f"{text}" for (bbox, text, prob) in result])

    # 2. OpenCV简单处理(示例:转灰度图)
    img = cv2.imread(image_path)
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray_save_path = image_path.replace('.', '_gray.')
    cv2.imwrite(gray_save_path, gray_img)

    # 3. PyODBC写入数据库
    conn = pyodbc.connect(db_connection_str)
    cursor = conn.cursor()
    # 确保数据库表已存在:CREATE TABLE ocr_results (id INT IDENTITY(1,1) PRIMARY KEY, image_path NVARCHAR(255), ocr_text NVARCHAR(MAX))
    cursor.execute("INSERT INTO ocr_results (image_path, ocr_text) VALUES (?, ?)", (image_path, ocr_text))
    conn.commit()
    conn.close()

    return {
        'ocr_text': ocr_text,
        'gray_image_path': gray_save_path,
        'status': 'success'
    }

2. C#调用代码

using System;
using Python.Runtime;

namespace PythonIntegrationDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 初始化Python.Runtime
            var pythonHome = @"C:\Python39"; // 替换为你的Python安装路径
            var pythonLib = $@"{pythonHome}\Lib\site-packages";
            Environment.SetEnvironmentVariable("PYTHONHOME", pythonHome);
            Environment.SetEnvironmentVariable("PYTHONPATH", pythonLib);

            PythonEngine.Initialize();

            try
            {
                using (Py.GIL()) // 获取全局解释器锁,必须加
                {
                    // 加载Python脚本
                    dynamic script = Py.Import("ocr_db_script");

                    // 定义参数
                    string imagePath = @"C:\test_image.jpg"; // 替换为你的测试图片路径
                    string dbConnStr = @"Driver={SQL Server};Server=.\SQLEXPRESS;Database=TestDB;Trusted_Connection=True;"; // 替换为你的数据库连接串

                    // 调用Python函数
                    dynamic result = script.process_image_and_save(imagePath, dbConnStr);

                    // 处理返回结果
                    Console.WriteLine("OCR识别结果:");
                    Console.WriteLine(result.ocr_text);
                    Console.WriteLine($"灰度图已保存至: {result.gray_image_path}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"执行出错: {ex.Message}");
                // 捕获Python异常并打印详情
                if (ex is PythonException pyEx)
                {
                    Console.WriteLine($"Python异常栈信息: {pyEx.StackTrace}");
                }
            }
            finally
            {
                PythonEngine.Shutdown();
            }
        }
    }
}

四、常见问题排查

  • 提示「找不到模块」:检查PYTHONPATH是否包含Python的site-packages目录,或在Python脚本开头用sys.path.append手动添加
  • 初始化失败:确保Python版本与Python.Runtime版本匹配,项目平台(x64/x86)与Python一致
  • 数据库连接失败:检查PyODBC驱动是否安装,连接串格式是否正确
  • EasyOCR首次运行慢:首次执行会下载预训练模型,后续会缓存,可提前手动下载模型到指定目录

内容的提问来源于stack exchange,提问作者user1498247

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:43:02