ฉันกำลังพยายามใช้ระบบการดึงข้อมูลรูปภาพตามเนื้อหา แต่ก่อนหน้านั้นฉันต้องการรับภาพรวมของภาษาการเขียนโปรแกรมบางอย่างที่เหมาะสมสำหรับงานนี้ (มี libs ที่ดีและเช่นนั้น)
ไม่มีใครรู้ภาษาและ libs ที่ดีสำหรับงานประเภทนั้นบ้าง? งูหลามหรือจาวาล่ะ
ดีที่สุด
ฉันกำลังพยายามใช้ระบบการดึงข้อมูลรูปภาพตามเนื้อหา แต่ก่อนหน้านั้นฉันต้องการรับภาพรวมของภาษาการเขียนโปรแกรมบางอย่างที่เหมาะสมสำหรับงานนี้ (มี libs ที่ดีและเช่นนั้น)
ไม่มีใครรู้ภาษาและ libs ที่ดีสำหรับงานประเภทนั้นบ้าง? งูหลามหรือจาวาล่ะ
ดีที่สุด
คำตอบ:
บางทีคุณอาจเฉพาะเจาะจงมากขึ้นเกี่ยวกับขอบเขตและขนาดของงานของคุณ (โครงการทางวิชาการผลิตภัณฑ์เดสก์ท็อปหรือมือถือ? โครงการเชิงพาณิชย์บนเว็บ?)
คำแนะนำและความคิดเห็น:
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 ++ จะไม่เป็นตัวเลือก
โดยเฉพาะอย่างยิ่งเนื่องจากโครงการของคุณเป็นนักวิชาการMathematicaเป็นระบบซอฟต์แวร์ที่ดีและเหมาะสม Mathematica 8 มาพร้อมกับชุดคุณสมบัติที่ครอบคลุมสำหรับการประมวลผลภาพพีชคณิตเชิงเส้นตัวเลข GPU ฯลฯ นอกจากนี้ยังเป็นระบบที่เป็นสัญลักษณ์หลายครั้งที่ฉันสามารถหาวิธีแก้ปัญหาแบบปิดสำหรับสมการค่อนข้างมีประโยชน์สำหรับงานการมองเห็นด้วยคอมพิวเตอร์ Mathematicaยังสามารถสื่อสารกับรหัส Python, C, C ++, Java, .NET, ... , code
หากนี่เป็นโครงการทางวิชาการคุณควรใช้ Matlab และโดยเฉพาะอย่างยิ่งกล่องเครื่องมือประมวลผลภาพและกล่องเครื่องมือระบบการมองเห็นด้วยคอมพิวเตอร์ มันจะช่วยให้คุณสั่งซื้อเวลาน้อยลงในการสร้างต้นแบบและประเมินอัลกอริทึมใน Matlab กว่าใน C ++
แม้ว่าจะมีอินเทอร์เฟซ Python OpenCV จะใช้งานได้ยากกว่า Matlab และถ้าคุณต้องใช้จริงๆคุณสามารถเรียกรหัส C หรือ C ++ จาก Matlab ผ่าน mex
สำหรับระบบดึงภาพ คุณจะมีฝั่งไคลเอ็นต์และรหัสฝั่งเซิร์ฟเวอร์ ฝั่งเซิร์ฟเวอร์สามารถเป็นได้ทั้งใน Python หรือ C / C ++ OpenCV เป็นตัวเลือกที่ดีที่สุดของคุณที่นี่ มันมีทั้งอินเตอร์เฟสหลามและ C ++ สำหรับฝั่งไคลเอ็นต์ฉันคิดว่าคุณควรใช้จาวา
ภาษาที่ดีที่สุดสำหรับการมองเห็นคอมพิวเตอร์คือ C ++ แม้ว่าข้อเสียเปรียบที่สำคัญคือมันยากที่จะบรรลุสิ่งที่คุณต้องการ OpenCV เป็นห้องสมุดที่ดีที่สุดสำหรับการมองเห็นของคอมพิวเตอร์ แต่คุณสามารถทำสิ่งเดียวกันโดยใช้ matlab หรือ python