ภาษาที่ดีสำหรับการมองเห็นคอมพิวเตอร์?


28

ฉันกำลังพยายามใช้ระบบการดึงข้อมูลรูปภาพตามเนื้อหา แต่ก่อนหน้านั้นฉันต้องการรับภาพรวมของภาษาการเขียนโปรแกรมบางอย่างที่เหมาะสมสำหรับงานนี้ (มี libs ที่ดีและเช่นนั้น)

ไม่มีใครรู้ภาษาและ libs ที่ดีสำหรับงานประเภทนั้นบ้าง? งูหลามหรือจาวาล่ะ

ดีที่สุด


ขอบเขตเป็นโครงการทางวิชาการ ;-) ขอโทษที่ไม่ได้บอกว่า!
jstr

1
ฉันทำงานเป็นเวลา 3 ปีในกลุ่มคอมพิวเตอร์วิสัยทัศน์เพื่อเริ่มต้นซอฟต์แวร์ เราใช้ python + scipy / numpy สำหรับการสร้างต้นแบบอย่างรวดเร็วและ C ++ สำหรับรหัสการผลิต boost :: python wrappers สำหรับ C ++ ที่หนักหน่วงช่วยด้วยการย้ายพอร์ต BLAS และ LAPACK ใช้สำหรับเนื้อหาที่มีตัวเลขมาก
Wim

2
@wim - ความคิดเห็นของคุณน่าจะเป็นคำตอบที่ดีพร้อมรายละเอียดเพิ่มเติมเล็กน้อยว่าทำไมคุณถึงใช้ภาษาเหล่านั้นในการพัฒนาที่แตกต่างกัน
Mark Booth

1
คุณสามารถใช้ Matlab หรือOctaveสำหรับการสร้างต้นแบบอย่างรวดเร็วและแปลงเป็น C ++ ด้วยความช่วยเหลือของชุดเครื่องมือเช่นArmadillo (สำหรับพีชคณิตเชิงเส้น) และMLPACK (สำหรับการเรียนรู้ของเครื่องและการจดจำรูปแบบ) อาร์มาดิลโล่ใช้ BLAS และ LAPACK ภายใน (เช่นเดียวกับ Matlab) นอกจากนี้คุณยังสามารถ mix'n'match รหัส Matlab / Octave ด้วยรหัส C ++ ผ่านทางส่วนต่อประสาน mex ของ Armadillo
mtall

คำตอบ:


35

บางทีคุณอาจเฉพาะเจาะจงมากขึ้นเกี่ยวกับขอบเขตและขนาดของงานของคุณ (โครงการทางวิชาการผลิตภัณฑ์เดสก์ท็อปหรือมือถือ? โครงการเชิงพาณิชย์บนเว็บ?)

คำแนะนำและความคิดเห็น:

  • Matlab เป็นเรื่องธรรมดาในโลกการศึกษาและค่อนข้างดีสำหรับการร่าง / ตรวจสอบความคิด คุณจะสามารถเข้าถึงรหัสขนาดใหญ่จากนักวิจัยคนอื่น ๆ (ใน CV และการเรียนรู้ของเครื่อง); การสร้างต้นแบบและการดีบักจะรวดเร็วและง่ายดาย แต่สิ่งที่คุณจะพัฒนาในสภาพแวดล้อมนี้จะยากที่จะนำมาผลิต คุณอาจมีปัญหาเกี่ยวกับหน่วยความจำ / ประสิทธิภาพการทำงาน (มีสถานการณ์ที่คุณไม่สามารถอธิบายสิ่งที่คุณต้องการทำในรูปแบบดั้งเดิมของ Matlab และต้องเริ่มวนรอบพิกเซลและ Matlab เป็นภาษาที่ตีความไม่ได้ ช่วยในบริบทนี้) การโต้ตอบกับฐานข้อมูลเว็บเซิร์ฟเวอร์และอื่น ๆ ไม่ใช่เรื่องง่ายบางครั้งเป็นไปไม่ได้ (คุณจะไม่ได้รับโปรแกรม Matlab เพื่อให้เป็นเซิร์ฟเวอร์ที่เรียกว่า Thrift โดยเว็บฟรอนต์เอนด์) ค่าใช้จ่าย $$$

  • C ++ เป็นสิ่งที่ใช้สำหรับระบบ CV ระดับการผลิตจำนวนมาก (คิดถึงบางสิ่งในระดับของการค้นหารูปภาพของ Google หรือ Streetview หรือแอปพลิเคชันหุ่นยนต์เชิงพาณิชย์จำนวนมาก) ห้องสมุดที่ดีเช่น OpenCV ประสิทธิภาพที่ยอดเยี่ยมและง่ายต่อการใส่ลงในสภาพแวดล้อมการผลิต หากคุณต้องการเรียนรู้ด้วยเครื่องมีห้องสมุดมากมายที่นั่น (LibSVM / SVMlight, Torch) หากคุณต้องหันไปใช้รหัส "วนรอบพิกเซลทั้งหมด" มันจะทำงานได้ดี ใช้งานง่ายสำหรับการเขียนโค้ดระบบ / เลเยอร์การจัดเก็บที่ต้องการในระบบการดึงข้อมูลขนาดใหญ่ (เช่น: แฮชแม็พขนาดใหญ่มากบนดิสก์สำหรับการจัดเก็บคุณลักษณะการแมปดัชนีแบบกลับด้านเพื่อแฮชกับรูปภาพ) สิ่งต่าง ๆ เช่นชุดแพ็คเก็ต / ข้อความสามารถเปลี่ยนโปรแกรมดึงข้อมูลของคุณให้เป็นเซิร์ฟเวอร์ RPC ซึ่งสามารถเรียกใช้โดยเว็บส่วนหน้า อย่างไรก็ตาม: ไม่คล่องแคล่วสำหรับการสร้างต้นแบบค่อนข้างน่ากลัวสำหรับการลองความคิดใหม่ ๆ เวลาในการพัฒนาช้าลง และอยู่ในมือของผู้ที่ไม่มีประสบการณ์อาจมีปัญหาในการติดตามการแสดงและ / หรือปัญหาความไม่แน่นอน

  • Python เป็นจุดศูนย์กลางระหว่างทั้งสอง คุณสามารถใช้มันสำหรับการคำนวณเชิงตัวเลขของ Matlab style (ที่มี numpy และ scipy) + มีการเชื่อมโยงกับไลบรารีอย่าง OpenCV คุณสามารถทำสิ่งที่ระบบ / โครงสร้างข้อมูลกับมันและรับผลการดำเนินงานที่ยอมรับได้ มีชุดบทเรียนการเรียนรู้ของเครื่องค่อนข้างน้อย แต่น้อยกว่าใน Matlab หรือ C ++ ยกเว้นว่าคุณต้องใช้รหัส "วนรอบพิกเซลทั้งหมด" คุณจะสามารถรหัสทุกอย่างที่คุณทำได้ด้วย C ++ ด้วยอัตราส่วนประสิทธิภาพ 1: 1.5 ถึง 1: 3 และอัตราส่วน 2: 1 ถึง 10: 1 ของขนาดซอร์สโค้ด (เป็นที่ถกเถียงกัน) แต่ขึ้นอยู่กับความสำเร็จของโครงการของคุณจะมีจุดที่ประสิทธิภาพจะเป็นปัญหาและเมื่อเขียนใหม่ใน C ++ จะไม่เป็นตัวเลือก


4
นอกจากนี้ Matlab มีความแข็งแกร่งในด้านเอกสารซึ่งแตกต่างจาก Python
Andrey Rubshtein

1
แล้ว C ล่ะ นั่นเป็นภาษาที่ฉันต้องไปเมื่อสงสัย
Zetta Suro

10

โดยเฉพาะอย่างยิ่งเนื่องจากโครงการของคุณเป็นนักวิชาการMathematicaเป็นระบบซอฟต์แวร์ที่ดีและเหมาะสม Mathematica 8 มาพร้อมกับชุดคุณสมบัติที่ครอบคลุมสำหรับการประมวลผลภาพพีชคณิตเชิงเส้นตัวเลข GPU ฯลฯ นอกจากนี้ยังเป็นระบบที่เป็นสัญลักษณ์หลายครั้งที่ฉันสามารถหาวิธีแก้ปัญหาแบบปิดสำหรับสมการค่อนข้างมีประโยชน์สำหรับงานการมองเห็นด้วยคอมพิวเตอร์ Mathematicaยังสามารถสื่อสารกับรหัส Python, C, C ++, Java, .NET, ... , code


5

หากนี่เป็นโครงการทางวิชาการคุณควรใช้ Matlab และโดยเฉพาะอย่างยิ่งกล่องเครื่องมือประมวลผลภาพและกล่องเครื่องมือระบบการมองเห็นด้วยคอมพิวเตอร์ มันจะช่วยให้คุณสั่งซื้อเวลาน้อยลงในการสร้างต้นแบบและประเมินอัลกอริทึมใน Matlab กว่าใน C ++

แม้ว่าจะมีอินเทอร์เฟซ Python OpenCV จะใช้งานได้ยากกว่า Matlab และถ้าคุณต้องใช้จริงๆคุณสามารถเรียกรหัส C หรือ C ++ จาก Matlab ผ่าน mex


4

สำหรับระบบดึงภาพ คุณจะมีฝั่งไคลเอ็นต์และรหัสฝั่งเซิร์ฟเวอร์ ฝั่งเซิร์ฟเวอร์สามารถเป็นได้ทั้งใน Python หรือ C / C ++ OpenCV เป็นตัวเลือกที่ดีที่สุดของคุณที่นี่ มันมีทั้งอินเตอร์เฟสหลามและ C ++ สำหรับฝั่งไคลเอ็นต์ฉันคิดว่าคุณควรใช้จาวา


3

ภาษาที่ดีที่สุดสำหรับการมองเห็นคอมพิวเตอร์คือ C ++ แม้ว่าข้อเสียเปรียบที่สำคัญคือมันยากที่จะบรรลุสิ่งที่คุณต้องการ OpenCV เป็นห้องสมุดที่ดีที่สุดสำหรับการมองเห็นของคอมพิวเตอร์ แต่คุณสามารถทำสิ่งเดียวกันโดยใช้ matlab หรือ python

ลองดูที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.