PDA

View Full Version : Một bài tập nhỏ về ứng dụng camera


svn
25-05-2007, 12:15 PM
Đây là một đề tài nhỏ, phải nói là ko khó khăn lắm (mình làm có 2 ngày), đúng ra đó là đồ án môn học, nhưng vì mình ko đặt nặng vấn đề coder :D , cho nên sau khi đã hiểu dc vấn đề thì cái đầu tiên mình làm là tìm ngay xem có những project tương tự như vậy chưa, và học hỏi họ trước :) Ứng dụng của mình viết bằng C# và sử dụng thư viện OpenCVDotNet, một wrapper của thư viện OpenCV của Intel sang DotNet :D
Tuy trong thư viện này có sẵn các object cho xử lý ảnh, nhưng chương trình này chỉ minh họa cho khả năng ứng dụng xử lý ảnh thôi,chứ ko bàn đến cách cài đặt các giải thuật và tìm kiếm giải thuật tối ưu. Ai đó thấy em dùng thư viện có sẵn đừng nói em chỉ copy&paste code mà tội nghiệp.
Link OpenCVDotNet: http://code.google.com/p/opencvdotnet/
Link source (dùng VS2005 nhé :D ) : http://haminhtranhanh.googlepages.com/tracker.zip
code mình hơi lung tung, do thử nhiều phương pháp khác nhau, nên trong code còn nhiều rác :)
Còn đây là đoạn video demo của nó: http://www.youtube.com/watch?v=FMhcmiQwEns

Trong mô hình này dùng động cơ bước nên nó hơi giật :D, ban đầu định dùng RC Servo nhưng nó đắt quá :p

IRF540CR
23-06-2007, 01:30 PM
Rất cảm ơn bạn đã post bài này lên.Mình thấy công nghệ này rất hay,mình cũng muốn nghiên cứu về nó nhưng cách thức như thế nào và bắt đầu từ đâu chắc có lẽ SVN biết rất rõ(vì đã làm qua rồi mừ).SVN có thể cho mình email được không để mình tiện liên lạc với SVN.Email của mình vucr2008@yahoo.com.Rất mong nhận được sự giúp đở của SVN.

thanhhieu1611
23-06-2007, 08:01 PM
Đây là công nghệ mọi thành viên đều rất muốn nắm bắt. Tớ chưa tìm hiểu nhưng ngày đó sẽ ko xa đâu. Hy vọng chúng ta sẽ cùng nhau nắm được công nghệ này.

gong05sk
24-06-2007, 10:21 PM
bạn có thể cho mình bài hướng dẫn cụ thể không. nói thật mình mới chỉ là sinh viên năm thứ nhất, chưa biết tí ti nào cả. làm ơn chỉ mình điểm bắt đầu và con đường tớ phải đi...thanks. hãy mail cho tớ gong_05sk@yahoo.com.vn cảm ơn bạn nhiều nha. bạn không cần phải chỉ cụ thể, chỉ cần cạch hướng đi và tài liệu tham khảo chương trình ứng dụng, trong bản demo tớ thấy có cái mạch giao tiếp thì phải. chỉ tớ luôn nhé...

svn
05-10-2007, 07:25 PM
Hix, lâu quá mình mới xem lại 2pic này :(
Tuy đó là đồ án mình làm, nhưng tư tưởng của mình là cái gì người ta đã làm tốt thì mình ko nên làm lại :D, cho nên chỉ cần tìm dc thư viện ngon là mình xài luôn, hiểu giải thuật của nó là dc. Và vì mình dùng dotnet nên opencvdotnet hiện là cái tốt nhất mình tìm dc, tuy nhiên nó vẫn thiếu vài giải thuật khá hay mà bản opencv gốc của intel có.
Trong trang web mình đưa có sẵn các ví dụ, bạn có thể down về xem source.
Còn mạch thì chỉ là mạch giao tiếp qua rs232 nhận vị trí tâm của đối tượng (thật ra là của hình vuông bao quanh đối tượng) rồi cho cái động cơ gắn wc quay theo thôi ;))
Nếu nói về kiến thức trong lĩnh vực này, thì nói thật là mình còn gà hơn cả gà, mí đại ca nào yêu cầu mình viết code cài đặt giải thuật thì mình chịu chết (chỉ bít xài).

tungthanh
15-10-2007, 12:31 AM
svn ơi cho hỏi chút, mình cũng đang làm giống bạn nhưng xài mathlab. Bạn có thể nói rõ về giãi thuật bám đối tượng d ko? ( theo source mầu cũng d). Bạn tạo cái hình vuông xung quanh đối tượng sao vậy?

svn
15-10-2007, 07:00 PM
Trong mathlab hình như có phần image toolbox :D, có thể sử dụng dc, nhưng mà mathlab thì mình gần như là ko biết :(
Giải thuật mình sử dụng trong bài của mình là Mean shift, bạn có thể google từ khóa này, rất nhiều tài liệu nói về nó. Trong ví dụ của mình thì đầu tiên mình vẽ 1 hình vuông lựa chọn đối tượng (đối tượng thường có màu sắc khá khác biệt so với chung quanh, khi lựa chọn thì biểu đồ màu của khu vực đó sẽ dc lưu lại), sau đó chỉ cần tìm ở những vùng lân cận những vị trí cho biểu đồ màu sát nhất thôi.
Nhắc lại, tất cả những việc trên nó được làm sẵn trong thư viện mình dùng :p , muốn tìm hiểu chi tiết cũng như tự cài đặt giải thuật thì các bạn chịu khó google hoặc vào thư viện trường vậy :)

phucanh
24-10-2007, 09:28 PM
SVC !bạn up lên cái đoạn xử lý ảnh !!nhưng ko hiểu mình dwload thư viện opencv roi mà cài thì nó bảo là lỗi đường dẫn bảo phải ko thể intall dưới C:\Program Files\OpenCVDotNet\bin và ko extract ra được và mình cũng đang tìm tài liệu vể ý nghĩa của các hàm trong thư viện opencv! bạn có file đó ko??Nếu có cho mình xin nhé! cảm ơn trước nhé!!

svn
27-10-2007, 09:36 PM
Trên cái link đầu tiên mình đưa đã có hướng dẫn cài đặt và tut cho nó :D
Tuy nhiên tut của nó ko đầy đủ. Nếu bạn muốn tìm thêm các hàm khác thì chỉ có ...mò :(
Trước mình làm, thì mình mò như sau: đầu tiên tải cái doc của OpenCV gốc trên trang của intel về, xem nó có hàm gì, tác dụng thế nào, rồi sau đó mở source của OpenCVDotNet ra, nhìn trong đấy, rồi xem tut của nó, để xem cách họ sử dụng như thế nào, rồi các hàm khác cứ na ná như vậy mà viết, ko dc thử xoá, viết lại mới :P
Mình hoàn toàn ko dấu gì, nhưng thật sự là ngoài kiểu mò đó ra, mình ko biết có cái doc nào hoàn chỉnh cho cái này hay ko :(
Một số tính năng của OpenCV gốc vẫn chưa có trong OpenCVDotNet, điển hình là thuật toán LKTracking :( , xài cái này làm trò lăn bóng hay dùng webcam làm joyticks hay lắm :">

phucanh
08-11-2007, 10:16 PM
Ban svn !! minh kô cài được opencvdotnet !! nó bị lỗi như thế này nè!! bạn có găp trường hơp này ko! co file dưới đây!!
giúp mình vói!! cam ơn nhiều!

phucanh
08-11-2007, 10:25 PM
Nó cứ đòi đương dẫn C:\Program Files\OpenCVDotNet\bin ko hiểu nỗi

có file ảnh!!

xuanhuong1984
09-11-2007, 02:02 AM
Chào bạn svn bạn có thể hướng dẫn cách làm cụ thể được ko, vì trình độ mình còn hạn hẹp mà.

svn
10-11-2007, 03:04 AM
Đây là trình tự các bạn phải làm để cài, cái vụ này mình công nhận nó ko làm tự nhận đường dẫn nên hơi chuối :) (chú ý là dùng dotnet nhé, VB, VC... cũng dc nhưng phải là .NET :D )
Đầu tiên, tải OpenCV gốc và OpenCVDotnet:
OpenCV: http://downloads.sourceforge.net/opencvlibrary/OpenCV_1.0.exe?modtime=1161287502&big_mirror=1
OpenCVDotNet:
http://opencvdotnet.googlecode.com/files/opencvdotnet-0.7-setup.exe

Sau khi download về, cài OpenCV (lấy từ cái link đầu tiên) vào thư mục c:\Program Files\OpenCV (chính xác thư mục này)
Sau đó cài OpenCVDotNet như bình thường, nó sẽ tìm trong thư mục trên bộ OpenCV gốc, do đó nếu các bạn ko cài hoặc cài vào thư mục khác nó báo lỗi ráng chịu :D (cái này nó ko tự detect đường dẫn dc, chuối thê ko bit)

Sau khi cài xong xuôi, mở VS2005 ra, tạo một project mới.
Vào Project>Add Reference, add thêm 2 file này trong thư mục cài OpenCVDotNet vào: OpenCVDotnet.dll và OpenCVDotnet.UI.dll
Thêm dòng sau vào đầu đoạn code (thường nằm trong form1.cs - mình dùng c#)

using OpenCVDotNet;

Vậy là có thể bắt đầu sử dụng thư viện này :D
Trong thư viện này, đã định nghĩa sẵn cho chúng ta 1 component, tương tự như picturebox, nhưng nhiều chức năng hơn, rất thuận tiện cho các ứng dụng xử lý ảnh: SelectPictureBox, tốt nhất nếu dùng OpenCVDotNet thì nên dùng luôn component này để lưu trữ, hiển thị ảnh luôn, component này chúng ta lôi ra từ file OpenCVDotnet.UI.dll :P
Đầu tiên, để capture ảnh từ 1 camera và hiển thị nó lên:

CVCapture capture = new CVCapture(); //ko nhất thiết phải khởi tạo = new CVCapture()

CVCapture là 1 object đặc tả cho các thiết bị như camera,webcam... đang có trên máy tính. Trường hợp chỉ có 1 cái webcam gắn vào nó sẽ tự detect và lưu vào đối tượng capture mình vừa tạo = dòng trên, còn có nhiều hơn 1 thì ... bạn phải làm luôn 1 form để chọn và cấu hình các tham số cho vào trong dấu () vậy, hoặc là điều chỉnh các tham số đó sau cũng dc.

Dùng đối tượng CVImage để lưu trữ hình ảnh, nên dùng cái này là tốt nhất, nó cũng rất dễ chuyển sang định dạng bitmap để dùng cho nhiều mục đích khác, nhưng các hàm xử lý ảnh của thư viện này thì chỉ dùng CVImage làm tham số :D

private CVImage image = null; //chưa có gì, nên cho nó = null


Tạo 1 SelectPictureBox trên form, giả sử đặt tên là SelectPictureBox1.
Để hiển thị hình ảnh thu dc từ webcam, có thể đặt đoạn code sau vào 1 timer, đặt interval là (1 / 24)*1000 ms (24 hình trên 1s ấy mà :p)

image = capture.QueryFrame();
if (image == null) capture.Restart();
selectPictureBox1.Image = image.ToBitmap();


Có nhiều bạn thắc mắc ko biết cái hình chữ nhật đỏ đỏ mình vẽ lên trên cái picture đó làm sao, cái đó ko phải mình làm, mà là một tính năng của SelectPictureBox :p Trong quá trình chương trình chạy, cứ cầm chuột nhấn giữ và kéo trên cái selectpicturebox là nó sẽ tự động vẽ ra 1 hình chữ nhật như vậy, sau khi thả chuột thì thông tin trong hình chữ nhật đó sẽ lưu lại, kể cả toạ độ của tâm hình chữ nhật đó.
Sau khi nắm dc vài component của thư viện này, phần còn lại là phải tìm hiểu về xử lý ảnh, chính xác là muốn xử lý cái gì, dùng thuật toán nào (cái này có thể ko cần tìm hiểu sâu, chỉ cần biết sơ sơ trình tự của từng cái là đủ để áp dụng các hàm có sẵn trong thư viện, chỉ cần sửa đôi chút trong hàm Track() trong source của mình (mình cũng chỉ sửa đôi chút từ cái source meanshift họ cung cấp mẫu thôi :"> ), để làm 1 ứng dụng nhỏ, đơn giản thì đoạn code trong hàm track() đó là đủ.
Trong ct của mình, trình tự sẽ là:
-Dùng chuột vẽ một hình chữ nhật bao quanh đối tượng di chuyển, thực chất là thay đổi vị trí và kích thước của SelectedRect trong component SelectPictureBox (chỉ cần giữ chuột và kéo, thả ra là nó tự thay đổi theo chúng ta chọn).
-Lưu biểu đồ màu của vùng dc chọn (bằng hàm UpdateHistogram)
-Sau một thời gian, áp dụng giải thuật detect = meanshift

using (CVImage bp = image.CalcBackProject(this.initialHistogram))
{
// calculate mean shift with user parameters and region of interest.
CVConnectedComp conn = bp.MeanShift(selectPictureBox1.SelectionRect, Iterations);

-Đặt lại SelectedRect cho SelectPictureBox1 ( hình chữ nhật mới bao quanh đối tượng di chuyển sẽ tự động dc vẽ)

selectPictureBox1.SelectionRect = conn.Rect;

Việc còn lại, là xác định xem vị trí mới này có thay đổi so với trước ko, lúc này mọi việc đơn giản hơn nhiều :), rồi xuất tín hiệu điều khiển ra mạch điều khiển động cơ quay camera :)
-Lặp lại các bước trên.

Thân :)

P/s: giờ mình mới xem lại cái thư mục project đó, quá nhiều file ko cần thiết, một số mình viết khi định dùng directX, nhưng ko ăn nhập gì vào chương trình cả, cứ remove nó thẳng tay đi :D

phucanh
15-11-2007, 01:55 PM
Thank for all! Svn !! Nó thật hay!! ko biết thuật toán trong xử lý robot !! bạn tài liệu gì hay một số thông tin và thuật toán trong xử lý ảnh trong robot!!Mình cũng đang tìm hiểu về nó!! Mình thấy dùng direct X cũng hay !nó có sách giới thiệu và một vài thuật toán!! mình đua ra để tham khảo!!

giaquangvu
22-03-2008, 09:09 PM
hi svn !!! đề tài của bạn rất hay. Bạn có thể chỉ dẫn mình cụ thể hơn không. Chẳng hạn giao tiếp máy tính thế nào, mạch quay webcam thế nào ... mình hơi gà ^^ . Cảm ơn bạn nhiều lắm giaquangvu@yahoo.com

dangtq84
26-04-2008, 12:28 PM
Tôi thấy công nghệ này ngày càng phát triển và được ứng dụng vào rất nhiều lĩnh vực trong cộc sống hiện nay. Tôi cũng mới được tiếp xúc với công nghệ này được chưa đầy một năm và tôi cũng mới tiếp thu được có một chút trong kho tàng rộng lớn của bộ mã nguồn mở này: OpenCV - Open Computer Vision.

picthanh
26-04-2008, 03:25 PM
nghe dc câu này của bác nhẹ cả người , em là đứa chưa biết gì mong dc bắt đầu với tài liệu của bác đây, tui nghi ko chỉ mình tui đâu ,mà có khá nhiều anh em trên diễn đàn đang chờ điều này đó, nhanh lên bác up lên đi.

biengam
20-08-2008, 11:23 AM
Bác SVN có thể gửi gói Opencv cho em đươc không vì em không tải được .Cảm ơn nhiều
Mail của em là biengamcd4ck@yahoo.com

bitter2008
29-08-2008, 04:24 PM
sao mà minh download khộng được vậy. giúp mình down vơi gmail của mình là: hanhphuclangthangth@gmail.com

phananhsang
06-10-2008, 10:43 AM
Em thấy bac svn cũng tài thật, không cần tài liệu mà cũng hiểu được thằng opencvdotnet (đoán vậy thôi, vì kiếm mãi trên google mà ko thấy tài liệu hướng dẫn)
Còn em cũng là một fan của dotnet nhưng trong tình trạng mới nhập môn về xử lý ảnh thì chắc là chỉ giám đi theo opencv thôi vì thấy tài liệu nó khá đầy đủ

svn
10-10-2008, 11:04 PM
@phananhsang: thật ra thì mình tham khảo trong tài liệu của OpenCV của Intel ấy chứ. Tên thì cũng na ná như nhau cả mà.
Tham gia vào OpenCVDotnet group trên Google và Yahoo cũng học được rất nhiều thứ :)
Còn cái hạn chế là bạn đã lỡ muốn làm trên dotnet với 1 OpenCV thuần dotnet thì phải chịu khó tự port 1 số thứ mình cần từ OpenCV của Intel sang dotnet (nếu chưa có ai làm, nếu có người nào đó làm rồi thì xin copy code của họ hay copy luôn cái thư viện của họ cũng được, trên các group họ luôn luôn phổ biến kết quả họ làm mà :) )
Chúc vui.

Nam_Rom
08-03-2012, 11:07 PM
bạn svn ơi , cho mình hỏi chút , mình cũng viết code dùng Emgu ( chắc bạn biết cái này nhỉ) nhưng mà khi cho chạy, không có lỗi nhưng cũng ko thu được ảnh ?
bạn có thể chỉ cho mình biết thế là sao không ?
mình cám ơn bạn trước