日期:2014-05-17  浏览次数:21273 次

调用微软MODI进行OCR图片文字识别问题
现在我可以进行OCR图片文字识别了,但是有一个问题:当我选择的识别区域较小时(经测试识别区域内少于8个汉字或数字时),将不能进行识别了,我想要的效果是:即便选择一个汉字或数字也可以进行识别。求代码~
附上我的关键代码:
C# code
                //创建一个临时文件
                string strFileName =string.Format("{0:yyyy_MM_dd_HH_mm_ss_ffff}", DateTime.Now) + ".tif";
                try
                {
                    //位图对象保存到一个TIFF文件
                    Console.WriteLine(m_obj.PixelFormat.ToString());
                    m_obj.Save(strFileName, ImageFormat.Tiff);
                    m_obj.Dispose();

                    //实例化MODI.Document对象
                    MODI.Document md = new MODI.Document();
                    md.Create(strFileName);

                    //运行OCR
                    md.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED, true, true);    //定义要识别的语言种类
                    //这个字符串将包含文本
                    string strText = String.Empty;

                    //获得第一个图片
                    MODI.Image image = (MODI.Image)md.Images[0];
                    //获取布局
                    MODI.Layout layout = image.Layout;

                    //遍历文字
                    for (int j = 0; j < layout.Words.Count; j++)
                    {
                        //得到文字
                        MODI.Word word = (MODI.Word)layout.Words[j];
                        // 添加一个空格来分隔文字
                        if (strText.Length > 0)
                        {
                            strText += " ";
                        }
                        //添加文字
                        strText += word.Text;
                    }
                    //关闭MODI.Document对象
                    md.Close(false);

                    //创建对话框显示文本的文本识别
                    ShowText st = new ShowText();
                    //该对话框的文本
                    st.m_strOCRText = strText;
                    //显示的对话框
                    st.ShowDialog();
                }
                catch (Exception)
                {
                    MessageBox.Show("识别区域不低于9个字符!", "提示");    //我要的是即便一个字符也可以识别
                }
                try
                {
                    //删除临时文件
                    File.Delete(strFileName);             
                }
                catch{ }


------解决方案--------------------
那个是国际时差吧 应该和程序设定的默认国际时间有关
不行你就给时间加八小时 再计算呗
------解决方案--------------------
这个根本不存在识别个数的限制
后台绘制个矩形,为识别指定区域即可
这样即使是个半个汉字也能识别