PDA

View Full Version : درخواست کمک : دریافت تصویر از وب کم جهت پردازش تصویر - در دلفی 2011



ali_reza_nazari
شنبه 05 آذر 1390, 03:32 صبح
باسلام
من دانشجوی ارشد رشته هوش مصنوعی هستم
زبان برنامه نویسی ام هم دلفی 2011 XE هست
برای نوشتن پروژه پردازش تصویر نیاز به یک کامپوننت دارم
یک کامپوننت که بتونه فریم ها رو از وب کم یا هر دوربین دیگه ای بگیره و به من بده تا من بتونم با استفاده از توابعی که نوشتم پردازش هایی روی تصویر انجام بدم.
تا اینجایی که توی سایت جستجو کردم چند تا کامپوننت هست
VideoGrabber
VideoLab
Visio.Video.Capture
ImageEn


البته اگر یک سورس کوچک برای عکس گرفتن از وبکم هم باشه، کار من راه می افته
درضمن سیستم عاملم هم ویندوز 7 هست

اما من نتونستم هیچ لینک دانلودی از اونها برای دلفی 2011 پیدا کنم.
ممنون می شم کمک کنید

Felony
شنبه 05 آذر 1390, 05:40 صبح
یک ویدئو آموزشی با نام "Webcam Fun For Delphi Developers" توسط Bob Swart در زمان کنفرانس Coderage II تهیه شده که با جست و جو تو گوگل میتونید پیداش کنید ؛ تو اون ویدئو نحوه برقراری ارتباط با Webcam توسط توابع API به صورت کامل توضیح داده شده .

ali_reza_nazari
شنبه 05 آذر 1390, 10:09 صبح
سلام
مشکل اینجاست که دلفی 2010 به بعد
روش های sendmessage رو برای وب کم پشتیبانی نمی کنند و تصویری رو به برنامه ارسال نمی کنند.
من چندتا برنامه از اینترنت گرفتم. خیلی هاشون هم اوپن سورس بودند
اما همشون همین مشکل رو داشتند و نمی تونستند تصویر بدهند
در نهایت وقتی که کدی برای این موضوع پیدا نکردم ، دنبال کامپوننت گشتم. توی سایت بچه ها کامپوننت های بالا رو معرفی کرده بودند. اما لینک دانلودی از اونها برای دلفی 2011 پیدا نکردم.
خیلی از برنامه ها هم تا ویندوز xp رو پشتیبانی می کردند و با سون مشکل داشتند.
اون ویئو هم مربوط به 2007 هست
ممنون می شم کمک کنید

این هم سورس کد جناب دکتر باب هستش

که همینجور که گفتم برای ویندوز سون کار نمی کنه

http://www.bobswart.nl/CodeRageII/source.zip

Felony
شنبه 05 آذر 1390, 11:17 صبح
مشکل اینجاست که دلفی 2010 به بعد
روش های sendmessage رو برای وب کم پشتیبانی نمی کنند و تصویری رو به برنامه ارسال نمی کنند.
یعنی چی ؟! پس این برنامه هایی که من برای پردازش تصویر و ... نوشتم داره رو هوا کار میکنه ؟!

ali_reza_nazari
شنبه 05 آذر 1390, 11:24 صبح
سلام دوباره
خوب شما همون سورسی رو که معرفی کردید و من لینکش رو بالا گذاشتم رو توی دلفی 2011 کامپایل و توی ویندوز 7 اجرا کنید. متوجه منظور من می شوید. چیزی که نمایش داده می شه، یک صفحه سیاه هستش

اصلا چراغ ال ای دی مربوط به وب کم لب تابم روشن نمیشه. درحالیکه د زمان فعال بودن وب کم، این چراغ همیشه روشنه.

ali_reza_nazari
شنبه 05 آذر 1390, 11:30 صبح
ممکنه مشکل از درایور یا خود وب کم لب تاب باشه؟

Felony
شنبه 05 آذر 1390, 12:26 عصر
برای من که مشکلی نداره ، مشکل هم ممکنه از هر چیزی باشه !

اگر خواستید من نسخه کامل کامپوننت Video Grabber رو برای Delphi 2010 دارم ولی Delphi 2011 دمو هست .

jst
شنبه 05 آذر 1390, 14:29 عصر
من با imageen کار کردم خیلی عالی جواب داد اگه خواستی pm بده بفرستم

ali_reza_nazari
شنبه 05 آذر 1390, 15:17 عصر
من دلفی 2011 رو دارم. بیشتر قسمهاش رو هم با اون نوشتم

MohsenB
شنبه 05 آذر 1390, 20:43 عصر
سلام

من در این زمینه تقریبا کارایی کردم . برا این کار راههای مختلفی هست مثلا توابع API ، استفاده از کامپوننت ها و استفاده از DirectX و ...

من برا همه این راهها نمونه کد همراه با سورس کامل و برا کلیه نسخه ها تا XE2 دارم .


براتون سورس روش سوم که استفاده از DirectX هستش رو قرار میدم .
این سورس یه نمونه کامل و کاربردیه که مطمئنم به دردتون میخوره .


دانلود (http://hipfile.com/84qx4wpjm6cr/DirectXDelphiWebcamCapture.rar.html)- رمز : mohsensoftware


موفق باشید

vcldeveloper
شنبه 05 آذر 1390, 22:05 عصر
رابط استاندارد ویندوز برای ارتباط با دوربین ها و اسکنرها اسمش WIA (Windows Image Acquisition) هست. WIA در همه ویندوزهای امروزی موجود هست، و اکثر دوربین ها و اسکنرها هم ازش پشتیبانی می کنند. WIA یک رابط برنامه نویسی COM در اختیار برنامه نویسان ویندوز قرار میده، پس می تونید با Import کردن Type library اون در دلفی، ازش در برنامه خودتون استفاده کنید. برای اطلاعات بیشتر درباره WIA، به مستندات رسمی خودش رجوع کنید:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368%28v=vs.85%29.aspx


من دلفی 2011 رو دارم. بیشتر قسمهاش رو هم با اون نوشتم کامپوننت های مربوط به دلفی 2010 یا دلفی XE را باید بتونید بدون مشکل در دلفی XE2 هم نصب کنید. البته به شرطی که سورس اونها رو هم داشته باشید. در این حالت، اون کامپوننت رو فقط می تونید برای برنامه های 32-بیتی و مبتنی بر VCL استفاده کنید. البته ممکنه یک کامپوننتی برای 64-بیت هم کار کنه، یا حتی یک کامپوننت غیر ویژوال، در FireMonkey هم کار کنه، اما هیچ تضمینی برای اینکه در اون حالت ها درست کار کنند، وجود نداره. از اون جایی که شما به احتمال زیاد برنامه تون 32-بیتی هست، و بعید می دونم که از FireMonkey استفاده کرده باشید، پس با همون کامپوننت های نسخه های قبلی (دقت کنید: با سورس) باید کارتان راه بیافته.

ali_reza_nazari
شنبه 05 آذر 1390, 23:20 عصر
سلام

من در این زمینه تقریبا کارایی کردم . برا این کار راههای مختلفی هست مثلا توابع API ، استفاده از کامپوننت ها و استفاده از DirectX و ...

من برا همه این راهها نمونه کد همراه با سورس کامل و برا کلیه نسخه ها تا XE2 دارم .


براتون سورس روش سوم که استفاده از DirectX هستش رو قرار میدم .
این سورس یه نمونه کامل و کاربردیه که مطمئنم به دردتون میخوره .


دانلود (http://hipfile.com/84qx4wpjm6cr/DirectXDelphiWebcamCapture.rar.html)- رمز : mohsensoftware


موفق باشید

باسلام
من سورس شما رو هم قبلا امتحان کردم. اون هم توی ویندوز سون با دلفی 2011 درست کار نمی کنه. یعنی همه چیز درست پیش میره. ولی صفحه نهایی یک صفحه مشکی هست
کامپوننت VideoLab رو از سایتش گرفتم و تست کردم. اون صفحه وب رو نشون می ده.
می خواستم سعی کنم تا اونجایی که میشه از کامپوننت استفاده نکنم که نشد
ممنون و متشکر

ali_reza_nazari
شنبه 05 آذر 1390, 23:21 عصر
رابط استاندارد ویندوز برای ارتباط با دوربین ها و اسکنرها اسمش WIA (Windows Image Acquisition) هست. WIA در همه ویندوزهای امروزی موجود هست، و اکثر دوربین ها و اسکنرها هم ازش پشتیبانی می کنند. WIA یک رابط برنامه نویسی COM در اختیار برنامه نویسان ویندوز قرار میده، پس می تونید با Import کردن Type library اون در دلفی، ازش در برنامه خودتون استفاده کنید. برای اطلاعات بیشتر درباره WIA، به مستندات رسمی خودش رجوع کنید:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368%28v=vs.85%29.aspx

کامپوننت های مربوط به دلفی 2010 یا دلفی XE را باید بتونید بدون مشکل در دلفی XE2 هم نصب کنید. البته به شرطی که سورس اونها رو هم داشته باشید. در این حالت، اون کامپوننت رو فقط می تونید برای برنامه های 32-بیتی و مبتنی بر VCL استفاده کنید. البته ممکنه یک کامپوننتی برای 64-بیت هم کار کنه، یا حتی یک کامپوننت غیر ویژوال، در FireMonkey هم کار کنه، اما هیچ تضمینی برای اینکه در اون حالت ها درست کار کنند، وجود نداره. از اون جایی که شما به احتمال زیاد برنامه تون 32-بیتی هست، و بعید می دونم که از FireMonkey استفاده کرده باشید، پس با همون کامپوننت های نسخه های قبلی (دقت کنید: با سورس) باید کارتان راه بیافته.

باسلام
مشکل من هم همون کامپوننت ها بود
یعنی لینک دانلود نسخه کرک شده اونها رو نداشتم
ممنون

MohsenB
یک شنبه 06 آذر 1390, 00:37 صبح
سلام

اگه بخواید بصورت عادی استفاده کنید خوب درسته ، اینجوری میشه .

من از روش زیر استفاده کردم ، امیدوارم بدردتون بخوره :


این خط ها رو تو کد ها پیدا کنید و به این صورتی که نوشتم تغییر بدین :


VideoBMPIndex := 1-VideoBMPIndex;
VideoImage.GetBitmap(VideoBMP[VideoBMPIndex]);



ModeBMP.Assign(VideoBMP[VideoBMPIndex]);
ModeBMP.Canvas.Draw(0,0, VideoBMP[VideoBMPIndex]);



imgCam.Canvas.FillRect(imgCam.BoundsRect);
StretchBlt(imgCam.Canvas.Handle,0,0,imgCam.Width,i mgCam.Height,ModeBMP.Canvas.Handle,0,0,ModeBMP.Wid th,ModeBMP.Height,SRCCOPY);

//if bmp.PixelFormat <> pf24bit Then bmp.PixelFormat := pf24bit;


Process(ModeBMP, bmp2);



img1.Canvas.Draw(0,0,bmp2);
bmp2.Canvas.FillRect(Rect(0,0,ModeBMP.Width, ModeBMP.Height));


OnNewFrameBusy := false;
end;

تو ضیح اینکه imgCam یه کنترل ایمیج هست که تصویر دوربین رو نمایش میده و

شما باید مثل مثالی که زدم از ModeBMP برای پردازش استفاده کنید . البته توصیه میکنم از ScanLine استفاده کنید .


موفق باشید