Saturday, March 30

Getting started Emgu with Visual C# 2010 Express

ถ้าหากเรามองว่า OpenCV คือ ไลบรารี่สำเร็จรูปที่ใช้สำหรับจัดการงานด้าน Computer Vision ซึ่งรองรับภาษา C/C++,JAVA,Python แล้วหล่ะก็ Emgu ก็คือฟังก์ชั่นที่ทำขึ้นมาครอบ OpenCV อีกชั้นหนึ่ง แต่ ทำขึ้นมาเพื่อรองรับภาษา Visual C# นั่นเอง  ซึ่งทำให้นักพัฒนาด้วยภาษา Visual C# สามารถก้าวเข้ามาเล่น Computer Vision ได้อย่างง่ายดาย

วันนี้ผมจะพาเพื่อนๆ มาติดตั้ง Emgu กันครับ เริ่มแรก เราต้องเตรียมซอร์ฟแวร์ที่จะติดตั้งกันก่อน โดยอ้างอิงจากที่ผมติดตั้งไว้แล้ว ดังนี้

ระบบปฏิบัติการ Windows7
Visual C# 2010 Express edition หากยังไม่มี ติดตั้งโปรแกรนี้ก่อน ได้จาก ที่นี่
ดาวน์โหลด Emgucv2.4.2 libemgucv-windows-x86-gpu-2.4.2.1777.exe ได้จาก ที่นี่
เมื่อได้ไฟล์ libemgucv-windows-x86-gpu-2.4.2.1777.exe ให้ทำการติดตั้งไว้ที่ Dirve C: เลยครับ

หรือจะไว้ที่ Drive ก็ได้ แล้วแต่สะดวก ในระหว่างการติดตั้ง ถ้ามีปัญหา เช่น

- Uninstall or Repair Microsoft C++ Redistributable ให้ตอบ Cancel
หรือ
- Visual Studio Debugger ถ้าเรายังไม่เคยติดตั้ง Emgu มาก่อน ใหคลิก Yes แต่ถ้าเคยติดตั้งมาแล้วให้คลิก No

Emgucv1Emgucv2Emgucv3Emgucv4Emgucv5

เมื่อเสร็จเรียบร้อยแล้ว เราต้ิองมาทำการ set path ให้ Windows มองหา Emgu ก่อน เพื่อป้องกันปัญหาต่างๆ ในการ Build solution โดยไปตั้งค่าที่

Control Panel->System->Advance system setting ที่แท๊บ Advanced คลิก

Environment Variables ที่ System Variables คลิกที่ Path แล้ว Edit..
ให้เอา path ที่เราติดตั้ง Emgu ไปใส่ต่อท้าย ในที่นี้ผมติดตั้งไว้ที่ C:\Emgu\emgucv-windows-x86-gpu2.4.2.1777\bin ผมก็ก๊อปปี้ไปต่อท้าย โดยคั่นด้วย ; ก่อน และหลัง path ที่ผมใส่เพิ่มเข้าไป จากนั้นกด OK เรื่อยๆ แล้วทำการรีสตาร์ทคอมพิวเตอร์ 1 ครั้ง

image

ต่อไป ให้ทำการ เปิด Visual C# ขึ้นมา แล้วทำการ New Project โดยเราจะสร้างโปรเจค แบบ  ตั้งชื่อโปรเคตามต้องการ จากนั้น สร้างหน้าตา form ดังรูป

image

กำหนดค่า text properties ให้ button1 และ button2 เป็น Image-1, Image-2 ตามลำดับ
กำหนดค่า text properties ให้ form1 เป็น  Hello Emgu
ส่วน PictureBox1 กำหนดให้มี Size เท่ากับ 400,300

Emgu Visual C# 2010 express

เสร็จแล้ว ที่หน้าต่าง Solution Explorer ทางขวามือ ที่ References ให้คลิกขวา แล้วทำการเลือก Add references..

ให้ทำการ add *.dll จากโฟวเดอร์ C:\Emgu\emgucv-windows-x86-gpu 2.4.2.1777\bin โดย

คลิก Ctrl ค้างไว้ แล้วคลิกที่ไฟล์ แต่ละไฟล์  แล้วกด OK

Add Reference_

จากนั้น กลับมาที่หน้า form design ของเรา ให้ดับเบิลคลิกที่ button1 เพื่อทำการเขียนโค๊ด โปรแกรมจะพาเราเข้ามาเขียนโค๊ดที่หน้า Form1.cs ให้เพิ่มโค๊ดเข้าไปดังรูป (เราทำการคลิกที่ button2 แล้วก็เพิ่มโค๊ดเข้าไปเช่นเดียวกัน กับครั้งแรก)

ก่อนที่เราจะรันโปรแกรมของเรา ให้เราทำการเตรียมภาพ ไว้ สองภาพ ในทีนี้ ผมได้เตรียมภาพที่ชื่อ linux.jpg และ windows.jpg เก็บไว้ที่ Drive E: ของผม (สังเกตจากในโค๊ด) โดยผมค้นหาภาพจาก อินเตอร์เนต โดยหาภาพที่มีขนาด 400x300 pixel ให้เท่ากับ size ของ picturebox ทีผมกำหนดไว้ตอนแรก

เมื่อเรียบร้อยแล้ว ให้กด F6 เพื่อ Build Solution หากไม่มีข้อความแสดง Error ใดๆ ให้กด F5 เพื่อ Start Debugging

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;

namespace HelloEmgu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Image<Bgr, Byte> img = new Image<Bgr, byte>("E:\\linux.jpg");
            pictureBox1.Image = img.ToBitmap(pictureBox1.Width, pictureBox1.Height);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Image<Bgr, byte> img = new Image<Bgr, byte>("E:\\windows.jpg");
            pictureBox1.Image = img.ToBitmap(pictureBox1.Width, pictureBox1.Height);
        }
    }
}

HelloEmgu - Microsoft Visual C# 2010 Express

ทดลองกด Image-1 และ Image-2 ดูผลลัพธ์ครับ ถ้าโปรแกรมที่เราเขียนขึ้น แสดงภาพได้ตามต้องการ ก็แสดงความยินดีด้วยครับ และขอให้สนุกกับ Emgu นะครับ

 

----------------------------------------------------------------------------------------------------------------

แก้ปัญหา “The type initializer for 'Emgu.CV.CvInvoke' threw an exception.”

The type initializer for 'Emgu.CV.CvInvoke' threw an exception.

เนื่องจากเกิดปัญหาเครื่องผมถูกอัพเกรดให้เป็น WIndows7 64 บิต อย่างเต็มตัว ซึ่งก่อนหน้าถูกอัพเกรดโค๊ดเหล่านี้ยังทำงานได้เป็นปรกติ แต่พอมาเป็น WIndows7 64 บิต กลับพบว่า ไม่สามารถทำงานได้ ฉะนั้นจึงต้องมาการเปลี่ยนแปลงดังนี้

1. ใ้ห้ทำการติดตั้ง libemgucv-windows-x86-2.4.0.1717.exe ดาวน์โหลดจาก ที่นี่ ติดตั้งเหมือนเดิม แต่อาจไม่จำเป็นต้องเป็น Drive C: แล้ว เพราะเราจะใช้การก๊อปปี้ไฟล์ dll มาใส่ในโปรเจคเลย

2. ติดตั้งเสร็จแล้ว ให้ทำการแก้ไขโค๊ด โดยทำการ Add references ใหม่ (reference เก่าให้ delete ทิ้งไป) โดยให้ browse ไปที่ path ที่เราติดตั้ง Emgu เวอร์ชั่น 2.4.0 แทน ในที่นี้ผม browse ไำปที่ E:\Emgu\emgucv-windows-x86 2.4.0.1717\bin แล้วเลือกไฟล์ Emgu.CV.dll,Emgu.CV.GPU.dll, Emgu.CV.ML.dll, Emgu.CV.UI.dll, Emgu.Util.dll

3. ทำการ add file dll อื่นมาเลย ในที่นี้เราต้องทำการเลือก Add Existing items..  แล้วเลือกเอาไฟล์ dll เข้ามาในโปรเจค 2 ไฟล์ คือไฟล์ opencv_core240.dll, opencv_imgproc240.dll ซึ่งอยู่ใน E:\Emgu\emgucv-windows-x86 2.4.0.1717\bin\x86 ที่หน้าต่าง properties ช่อง Copy to output directory ให้เลือก copy always

แล้วลองกด F5 (Start debugging) อีกครั้ง

-----------------------------------------------------------------------

แก้ไข 18/07/2014

เจอปัญหาเก่าอีกครั้ง ตอนนี้เปลี่ยนเครื่องคอมพ์ กับ windows 7 64bit ไม่แน่ใจว่าเกิดอะไรขึ้นเหมือนกัน ปัญหาเยอะจริงๆ เวลาเปลี่ยนเวอร์ชั่นเนี้ย เท่าๆ ที่อ่านดูคล้ายๆ กับว่าตอนที่ make file มาให้เรา มีปัญหาเรื่อง dirver card vga ไม่รองรับกับเครื่องอื่นๆ ก็รอเขาแก้ปัญหากันต่อไป ตอนนี้ ก็โหลดเวอร์ชั่นเบต้า มาใช้ก่อน เป็นเวอร์ชั่นที่ใช้กับ driver card vga ได้ทุกรุ่น Download libemgucv-windows-universal-cuda-2.9.0.1922-beta.exe (214.0 MB) หลังจากติดตั้งแล้ว ให้ทำการแก้ไข path ใหม่ ใน

Control Panel->System->Advance system setting ที่แท๊บ Advanced คลิก

เพิ่ม path นี้เข้าไป (สำหรับ windows7 64 bit)

C:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x64

แล้วทำการ รีสตาร์ทเครื่องคอมพ์ หนึ่งครั้ง จากนั้นก็ทำการสร้างโปรเจคใน Visual C# เหมือนเดิม ทำการ add referrence เอาเฉาพะ EMGU.CV.dll, EMGU.CV.UI.dll, Emgu.Util.dll ซึ่งอยู่ใน

C:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\

ที่เหลือไม่ต้องทำอะไรเหมือนคราวที่แล้ว เพราะเราได้กำหนด path ไว้แล้ว ทำการเขียนโค๊ดทดสอบ  อ่อ อย่าลืมเลือก solution platforms ให้เป็น x64 ด้วยหล่ะ ให้ตรงกับที่เราอ้าง path

"The type initializer for 'Emgu.CV.CvInvoke' threw an exception."

"The type initializer for 'Emgu.CV.CvInvoke' threw an exception."

เป็นวิธีแก้ปัญหาที่ง่ายดี ก็ได้หวังว่าผู้พัฒนา EMGU จะทำให้ง่ายกว่านี้ และ bug น้อยลงไปเรื่อยๆ นะครับ เอาหล่ะ ขอให้สนุกกับ EMGU กันต่อ

0 ความคิดเห็น:

Post a Comment

 

แจกฟรี พื้นที่ฝากไฟล์ 2 GB

ads

ติดตามข่าวสารผ่าน Twitter

ติดตาม Blog นี้

About Me

My photo

สวัสดีครับ ชื่อเปิ้ลนะครับ ถ้ามีอะไรให้ช่วยเหลือได้ ก็จะช่วยครับ
ผมได้สร้างบล๊อกไว้ เพื่อเก็บรวบรวมความรู้ และประสบการณ์ในการทำงานครับ แวะไปเยี่ยมชมกันได้ครับ http://mechacity.blogspot.com และบล๊อก http://faker-programmer.blogspot.com ครับ

Blog อื่นๆของฉัน

จำนวนการเยี่ยมชมบล๊อก