ARM9工控板在远程监控中的应用之六——利用COM组件远程抓拍图像

 2009-8-31          [nemail]    
[lablebox]
        英创ARM9工控主板功能齐全、体积小巧、性能稳定、超低价格的嵌入式主板产品。主板硬件完全按工业级标准设计,CPU采用了32位工业级ARM9芯片,PCB板经精心优化设计,除提供全面、高效的功能之外,还较好地控制了模块功耗。英创ARM9工控主板,为了适应远程监控的需要,添加了视频采集功能。在WinCE平台下,由于安装摄像头驱动不能像在PC上安装驱动那么方便,英创公司在WinCE内核中预先安装了特定摄像头的驱动。我们在测试的过程中选用的是海天地公司生产的QQ电脑眼—V8。但是,英创提供的摄像头驱动支持主芯片为ZC0301Plus(30万像素)、 ZC0301PL(30万像素)、 ZC0301PLH(130万像素)的摄像头。由于摄像头为USB接口,那么选好摄像头后,直接插在英创公司的USB HOST口,就可以使用英创公司提供的对摄像头操作的API函数,通过这些API函数可以很方便的完成启动视频、拍摄图片等操作。

        在工业现场,常常需要在复杂环境下监视现场的工作状态,远程视频监控适应了这一需要,它主要应用于无人值守、复杂环境及其恶劣环境的监视。远程视频监控系统应用大大的降低了人力资源的使用,同时对于那些不需要经常巡视的区域保持了较好的及时监控,即使是一些人力无法长期工作的恶劣地点也可以通过远程视频监控系统实现。远程视频监控系统的出现弥补了人力不足以及人力不能及的缺点,使得工作人员的工作环境变得舒适而其高效。英创适应了这一市场需求,推出了远程视频监控的解决方案。通过WebServer技术和COM组件技术,客户使用浏览器就能方便地实现视频监控,本文给出了详细的实现步骤。

1、设计COM组件
        新建EVC工程,添加接口、添加SNAP接口函数等COM组件技术的设计方法请参考《ARM9工控板在远程监控中的应用》系列文章,详细程序请参看光盘源码。下面只对Snap接口函数进行解释。

      // 函数功能:拍照
      // 入口参数:V1为照片文件存储位置,为绝对路径加文件名。
      // 出口参数:无
      // 返 回 值:TRUE:打开数据库成功;FALSE:打开数据库失败
      STDMETHODIMP CemCamera::Snap(VARIANT v1, long *pVal)
      {
              CComVariant v_1( v1 );
              v_1.ChangeType( VT_BSTR );      // 将VARIANT转换为字符串
             
CString csFileName(v_1.bstrVal);
              capInitCamera();          // 初始化摄像头
             
capSetVideoFormat(g_uIndex, fmt, VIDEO_SIZE_SIF);   // 设置视频格式和
              capStartCamera(g_uIndex);       // 启动摄像头
             
Sleep(150);
              capGetLastJpeg(g_uIndex, buffer, bufferLen);   // 拍照并保持在buffer中
             
if(!MyFile.Open(csFileName,CFile::modeCreate|CFile::modeWrite,NULL)) 
                                              // 如果不存在,就创建文件 如果文件存在,就打开文件
                     
MyFile.Write (buffer,length);      // 写文件 
             
LocalFree(buffer);         // 释放Buffer
             
capCloseCamera();         // 关闭摄像头
     
}

2、在浏览器查看拍摄的照片
        在网页中,主要提供了自动抓拍、手动抓拍、停止抓拍等按钮,其中,自动抓拍还要设置抓拍时间间隔。下面是主要的ASP代码。

      set Obj=CreateObject('Camera.emCamera')     // 创建Camera对象
     
Obj.snap('\nandflash\www\images\'&filename)  // 调用COM组件抓拍

        由于要用到文件操作,所以要创建文件操作对象

      set FileObj=CreateObject('Scripting.FileSystemObject')  // 创建对象
     
setTimeout('document.frmEmtronix.submit()',timenum) // 自动间隔毫秒提交网页

        更多代码请参考光盘源码。

3、综合测试
        把EMCamera文件下的所以文件拷贝到NandFlash/www文件夹下。把regsvr32.exe、Scripting.dll、Camera.dll文件拷贝到nandflash下。
        注册Com组件 regsvr32 Scripting.dll、regsvr32 Camera.dll
        在浏览器中输入 板卡ip地址/nand 就可以看到摄像头抓拍的照片。
[lablebox]