OpenCV กำลังระดมทุนเพื่อให้ห้องสมุดใช้งานได้ฟรีสำหรับทุกคน และเราต้องการการสนับสนุนจากชุมชนทั้งหมดเพื่อดำเนินการดังกล่าว บริจาคให้กับ OpenCV บน Github เพื่อแสดงการสนับสนุนของคุณ
แพ็คเกจ OpenCV เฉพาะ CPU ที่สร้างไว้ล่วงหน้าสำหรับ Python
ตรวจสอบส่วนการสร้างด้วยตนเอง หากคุณต้องการคอมไพล์การเชื่อมโยงจากแหล่งที่มาเพื่อเปิดใช้งานโมดูลเพิ่มเติม เช่น CUDA
หากคุณได้ติดตั้ง OpenCV เวอร์ชันก่อนหน้า/อื่นๆ ด้วยตนเอง (= ไม่ได้ติดตั้งผ่าน pip
) (เช่นโมดูล cv2 ในรูทของแพ็คเกจไซต์ของ Python) ให้ลบออกก่อนการติดตั้งเพื่อหลีกเลี่ยงข้อขัดแย้ง
ตรวจสอบให้แน่ใจว่าเวอร์ชัน pip
ของคุณเป็นเวอร์ชันล่าสุด (19.3 เป็นเวอร์ชันขั้นต่ำที่รองรับ): pip install --upgrade pip
ตรวจสอบเวอร์ชันด้วย pip -V
ตัวอย่างเช่น การกระจาย Linux มักจะมาพร้อมกับเวอร์ชัน pip
ที่เก่ามาก ซึ่งทำให้เกิดปัญหาที่ไม่คาดคิดมากมาย โดยเฉพาะกับรูปแบบ manylinux
เลือกแพ็คเกจที่ถูกต้องสำหรับสภาพแวดล้อมของคุณ:
มีแพ็คเกจที่แตกต่างกันสี่แพ็คเกจ (ดูตัวเลือก 1, 2, 3 และ 4 ด้านล่าง) และคุณควร เลือกเพียงหนึ่งแพ็คเกจเท่านั้น อย่าติดตั้งแพ็คเกจที่แตกต่างกันหลายชุดในสภาพแวดล้อมเดียวกัน ไม่มีสถาปัตยกรรมปลั๊กอิน: แพ็คเกจทั้งหมดใช้เนมสเปซเดียวกัน ( cv2
) หากคุณติดตั้งแพ็คเกจที่แตกต่างกันหลายชุดในสภาพแวดล้อมเดียวกัน ให้ถอนการติดตั้งแพ็คเกจทั้งหมดด้วย pip uninstall
และติดตั้งใหม่เพียงแพ็คเกจเดียว
ก. แพ็คเกจสำหรับสภาพแวดล้อมเดสก์ท็อปมาตรฐาน (Windows, macOS, เกือบทุกรุ่นของ GNU/Linux)
pip install opencv-python
pip install opencv-contrib-python
(ตรวจสอบรายการโมดูล contrib/พิเศษจากเอกสาร OpenCV)ข. แพ็คเกจสำหรับสภาพแวดล้อมเซิร์ฟเวอร์ (ไม่มีหัว) (เช่น Docker, สภาพแวดล้อมคลาวด์ ฯลฯ) ไม่มีการพึ่งพาไลบรารี GUI
แพ็คเกจเหล่านี้มีขนาดเล็กกว่าแพ็คเกจอื่น ๆ สองแพ็คเกจข้างต้น เนื่องจากไม่มีฟังก์ชัน GUI ใด ๆ (ไม่ได้คอมไพล์ด้วย Qt / ส่วนประกอบ GUI อื่น ๆ ) ซึ่งหมายความว่าแพ็คเกจจะหลีกเลี่ยงการเชื่อมโยงการพึ่งพาอย่างมากกับไลบรารี X11 และคุณจะได้ตัวอย่างอิมเมจ Docker ที่เล็กลง คุณควรใช้แพ็คเกจเหล่านี้เสมอหากคุณไม่ได้ใช้ cv2.imshow
และคณะ หรือคุณกำลังใช้แพ็คเกจอื่น (เช่น PyQt) นอกเหนือจาก OpenCV เพื่อสร้าง GUI ของคุณ
pip install opencv-python-headless
pip install opencv-contrib-python-headless
(ตรวจสอบรายการโมดูล contrib/พิเศษจากเอกสาร OpenCV)นำเข้าแพ็คเกจ:
import cv2
แพ็คเกจทั้งหมดมีไฟล์ Haar cascade cv2.data.haarcascades
สามารถใช้เป็นทางลัดไปยังโฟลเดอร์ data ตัวอย่างเช่น:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
อ่านเอกสาร OpenCV
ก่อนที่จะเปิดฉบับใหม่ โปรดอ่านคำถามที่พบบ่อยด้านล่างและดูปัญหาอื่นๆ ที่เปิดอยู่แล้ว
ถาม: ฉันจำเป็นต้องติดตั้ง OpenCV แยกต่างหากด้วยหรือไม่
ตอบ: ไม่ แพ็คเกจนั้นเป็นแพ็คเกจไบนารี่แบบล้อพิเศษและมีไบนารี OpenCV ที่สร้างแบบคงที่อยู่แล้ว
ถาม: การติดตั้ง Pip ล้มเหลวด้วย ModuleNotFoundError: No module named 'skbuild'
หรือไม่
ตั้งแต่ opencv-python
เวอร์ชัน 4.3.0.* ล้อ manylinux1
ถูกแทนที่ด้วยล้อ manylinux2014
หาก pip ของคุณเก่าเกินไป มันจะลองใช้การกระจายแหล่งที่มาใหม่ที่นำมาใช้ใน 4.3.0.38 เพื่อสร้าง OpenCV ด้วยตนเอง เนื่องจากไม่ทราบวิธีติดตั้งล้อ manylinux2014
อย่างไรก็ตาม การสร้างซอร์สก็จะล้มเหลวเช่นกันเนื่องจาก pip
เก่าเกินไป เนื่องจากไม่เข้าใจการขึ้นต่อกันของ build ใน pyproject.toml
หากต้องการใช้ล้อที่สร้างไว้ล่วงหน้า manylinux2014
ใหม่ (หรือสร้างจากแหล่งที่มา) เวอร์ชัน pip
ของคุณต้องเป็น >= 19.3 โปรดอัปเกรด pip
ด้วย pip install --upgrade pip
ถาม: การนำเข้าล้มเหลวบน Windows: ImportError: DLL load failed: The specified module could not be found.
-
ตอบ: หากการนำเข้าล้มเหลวบน Windows ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Visual C++ redistributable 2015 แล้ว หากคุณใช้ Windows เวอร์ชันเก่ากว่า Windows 10 และไม่ได้ติดตั้งการอัปเดตระบบล่าสุด อาจจำเป็นต้องใช้ Universal C Runtime ด้วย
รุ่น Windows N และ KN ไม่รวม Media Feature Pack ซึ่ง OpenCV กำหนด หากคุณใช้ Windows N หรือ KN edition โปรดติดตั้ง Windows Media Feature Pack ด้วย
หากคุณมี Windows Server 2012+ DLL ของสื่อก็อาจหายไปเช่นกัน โปรดติดตั้งคุณสมบัติที่เรียกว่า "Media Foundation" ในตัวจัดการเซิร์ฟเวอร์ ระวัง บางโพสต์แนะนำให้ติดตั้ง "Windows Server Essentials Media Pack" แต่โพสต์นี้ต้องการบทบาท "Windows Server Essentials Experience" และบทบาทนี้จะส่งผลอย่างมากต่อการกำหนดค่า Windows Server ของคุณ (โดยการบังคับใช้การรวมไดเรกทอรีที่ใช้งานอยู่ ฯลฯ ); ดังนั้นเพียงแค่ติดตั้ง "Media Foundation" ก็ควรเป็นทางเลือกที่ปลอดภัยกว่า
หากวิธีการข้างต้นไม่ได้ผล ให้ตรวจสอบว่าคุณกำลังใช้อนาคอนดาอยู่หรือไม่ Anaconda เวอร์ชันเก่ามีข้อบกพร่องซึ่งทำให้เกิดข้อผิดพลาด โปรดดูปัญหานี้สำหรับการแก้ไขด้วยตนเอง
หากคุณยังคงพบข้อผิดพลาดหลังจากที่คุณได้ตรวจสอบวิธีแก้ปัญหาก่อนหน้านี้ทั้งหมดแล้ว ให้ดาวน์โหลด Dependencies และเปิด cv2.pyd
(โดยปกติจะอยู่ที่ C:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
) ไว้ด้วยเพื่อแก้ไขปัญหา DLL ที่หายไป
ถาม: ฉันมีข้อผิดพลาดในการนำเข้าอื่นๆ อีกบ้าง
ตอบ: ตรวจสอบให้แน่ใจว่าคุณได้ลบการติดตั้งการผูก OpenCV Python ด้วยตนเองแบบเก่าแล้ว (cv2.so หรือ cv2.pyd ในแพ็คเกจไซต์)
ถาม: ฟังก์ชัน foo() หรือ method bar() ส่งคืนผลลัพธ์ที่ไม่ถูกต้อง ส่งข้อยกเว้น หรือทำให้ล่ามขัดข้อง ฉันควรทำอย่างไร?
ตอบ: พื้นที่เก็บข้อมูลประกอบด้วยสคริปต์การสร้างแพ็คเกจ OpenCV-Python เท่านั้น แต่ไม่มี OpenCV เอง การผูก Python สำหรับ OpenCV ได้รับการพัฒนาในพื้นที่เก็บข้อมูล OpenCV อย่างเป็นทางการ และเป็นสถานที่ที่ดีที่สุดในการรายงานปัญหา นอกจากนี้โปรดตรวจสอบวิกิ OpenCV และฟอรัม OpenCV อย่างเป็นทางการก่อนที่จะแจ้งข้อบกพร่องใหม่
ถาม: เหตุใดแพ็คเกจจึงไม่มีอัลกอริธึมที่ไม่ฟรี
ตอบ: อัลกอริธึมที่ไม่ฟรี เช่น SURF จะไม่รวมอยู่ในแพ็คเกจเหล่านี้ เนื่องจากได้รับการจดสิทธิบัตร/ไม่ฟรี และดังนั้นจึงไม่สามารถแจกจ่ายเป็นไบนารี่บิวท์อินได้ โปรดทราบว่า SIFT จะรวมอยู่ในรุ่นเนื่องจากการหมดอายุของสิทธิบัตรตั้งแต่ OpenCV เวอร์ชัน 4.3.0 และ 3.4.10 ดูปัญหานี้สำหรับข้อมูลเพิ่มเติม: #126
ถาม: เหตุใดแพ็คเกจและการนำเข้าจึงแตกต่างกัน (opencv-python กับ cv2)
ตอบ: ผู้ใช้จะเข้าใจ opencv-python
ได้ง่ายกว่า cv2
และช่วยให้ค้นหาแพ็คเกจด้วยเครื่องมือค้นหาได้ง่ายขึ้น cv2
(อินเทอร์เฟซเก่าใน OpenCV เวอร์ชันเก่าชื่อเป็น cv
) เป็นชื่อที่นักพัฒนา OpenCV เลือกเมื่อพวกเขาสร้างเครื่องกำเนิดไฟฟ้าที่มีผลผูกพัน ข้อมูลนี้จะถูกเก็บไว้เป็นชื่อการนำเข้าเพื่อให้สอดคล้องกับบทช่วยสอนประเภทต่างๆ ในอินเทอร์เน็ต การเปลี่ยนชื่อหรือลักษณะการนำเข้าอาจทำให้ผู้ใช้ที่มีประสบการณ์ซึ่งคุ้นเคยกับ import cv2
เกิดความสับสน
จุดมุ่งหมายของพื้นที่เก็บข้อมูลนี้คือการจัดหาวิธีการจัดทำแพ็คเกจ OpenCV ใหม่แต่ละรุ่นสำหรับเวอร์ชันและแพลตฟอร์ม Python ที่ใช้มากที่สุด
โปรเจ็กต์นี้มีโครงสร้างเหมือนกับแพ็คเกจ Python ทั่วไปที่มีไฟล์ setup.py
มาตรฐาน กระบวนการสร้างสำหรับรายการเดียวในเมทริกซ์ build มีดังต่อไปนี้ (ดูตัวอย่างไฟล์ .github/workflows/build_wheels_linux.yml
):
ใน Linux และ MacOS build: รับการพึ่งพา C เสริมของ OpenCV ที่เราคอมไพล์ด้วย
ชำระเงินที่เก็บและโมดูลย่อย
ค้นหาเวอร์ชัน OpenCV จากแหล่งที่มา
สร้าง OpenCV
จัดเรียงผลลัพธ์การสร้างของ OpenCV ใหม่ เพิ่มไฟล์ที่กำหนดเองของเรา และสร้างวงล้อ
ล้อ Linux และ macOS ได้รับการเปลี่ยนแปลงด้วยล้อตรวจสอบและการแบ่งตำแหน่งตามลำดับ
ติดตั้งล้อที่สร้างขึ้น
ทดสอบว่า Python สามารถนำเข้าไลบรารี่และรันการตรวจสอบสติได้บ้าง
ใช้เกลียวเพื่ออัปโหลดวงล้อที่สร้างขึ้นไปยัง PyPI (เฉพาะในรุ่นรีลีส)
ขั้นตอนที่ 1--4 จัดการโดย pip wheel
บิลด์สามารถปรับแต่งได้ด้วยตัวแปรสภาพแวดล้อม นอกเหนือจากตัวแปรใดๆ ที่บิลด์ของ OpenCV ยอมรับแล้ว เรายังจดจำ:
CI_BUILD
. ตั้งค่าเป็น 1
เพื่อจำลองพฤติกรรมการสร้างสภาพแวดล้อม CI ใช้เฉพาะใน CI builds เพื่อบังคับให้ build แฟล็กบางอย่างใน setup.py
อย่าใช้สิ่งนี้เว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรอยู่ENABLE_CONTRIB
และ ENABLE_HEADLESS
ตั้งค่าเป็น 1
เพื่อสร้างเวอร์ชันที่สนับสนุนและ/หรือไม่มีส่วนหัวENABLE_JAVA
ตั้งค่าเป็น 1
เพื่อเปิดใช้งานบิลด์ไคลเอ็นต์ Java สิ่งนี้ถูกปิดใช้งานตามค่าเริ่มต้นCMAKE_ARGS
อาร์กิวเมนต์เพิ่มเติมสำหรับการเรียกใช้ CMake ของ OpenCV คุณสามารถใช้สิ่งนี้เพื่อสร้างงานสร้างแบบกำหนดเองดูส่วนถัดไปสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างด้วยตนเองภายนอกสภาพแวดล้อม CI
หากไม่ได้เปิดใช้งานการขึ้นต่อกันบางอย่างในล้อที่สร้างไว้ล่วงหน้า คุณยังสามารถรันบิลด์ภายในเครื่องเพื่อสร้างวงล้อแบบกำหนดเองได้
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
git
เพื่อชำระเงิน OpenCV เวอร์ชันอื่นในโมดูลย่อย opencv
และ opencv_contrib
ได้หากจำเป็นexport CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
(ใน Windows คุณต้องตั้งค่าตัวแปรสภาพแวดล้อมให้แตกต่างออกไป ขึ้นอยู่กับ Command Line หรือ PowerShell)ENABLE_CONTRIB
และ ENABLE_HEADLESS
: เช่น export ENABLE_CONTRIB=1
หากคุณต้องการสร้าง opencv-contrib-python
pip wheel . --verbose
หมายเหตุ: ตรวจสอบให้แน่ใจว่าคุณมี pip
เวอร์ชันล่าสุด คำสั่ง pip wheel
จะแทนที่คำสั่ง python setup.py bdist_wheel
เก่าซึ่งไม่รองรับ pyproject.toml
setup.py
จะถูกวางไว้ในโฟลเดอร์ dist
แพ็คเกจพร้อมแล้วและคุณสามารถทำอะไรก็ได้ตามที่คุณต้องการmanylinux
บางส่วนเป็นโฮสต์ของ build หากจำเป็นต้องพกพาได้มากที่สุด และรัน auditwheel
สำหรับ wheel หลังจาก builddelocate
(เหมือนกับ auditwheel
แต่สำหรับ macOS) เพื่อการพกพาที่ดีขึ้น ในการสร้าง opencv-python
ในบิลด์การดีบักที่ไม่ได้รับการปรับให้เหมาะสม คุณจะต้องก้าวข้ามกระบวนการปกติเล็กน้อย
scikit-build
และ numpy
ผ่าน pippython setup.py bdist_wheel --build-type=Debug
dist/
โฟลเดอร์ด้วย pip install dist/wheelname.whl
หากคุณต้องการให้บิลด์สร้างคำสั่งคอมไพเลอร์ทั้งหมด การรวมกันของแฟล็กและตัวแปรสภาพแวดล้อมต่อไปนี้ได้รับการทดสอบเพื่อทำงานบน Linux:
export CMAKE_ARGS='-DCMAKE_VERBOSE_MAKEFILE=ON'
export VERBOSE=1
python3 setup.py bdist_wheel --build-type=Debug
ดูปัญหานี้สำหรับการสนทนาเพิ่มเติม: #424
ตั้งแต่ OpenCV เวอร์ชัน 4.3.0 การแจกแจงแหล่งที่มาก็มีให้ใน PyPI เช่นกัน ซึ่งหมายความว่าหากระบบของคุณเข้ากันไม่ได้กับวงล้อใด ๆ ใน PyPI pip
จะพยายามสร้าง OpenCV จากแหล่งที่มา หากคุณต้องการเวอร์ชัน OpenCV ที่ไม่มีใน PyPI ในรูปแบบการกระจายแหล่งที่มา โปรดปฏิบัติตามคำแนะนำในการสร้างด้วยตนเองด้านบนแทนเวอร์ชันนี้
คุณยังสามารถบังคับให้ pip
สร้างล้อจากการกระจายแหล่งที่มาได้ ตัวอย่างบางส่วน:
pip install --no-binary opencv-python opencv-python
pip install --no-binary :all: opencv-python
หากคุณต้องการโมดูลที่สนับสนุนหรือเวอร์ชัน headless เพียงเปลี่ยนชื่อแพ็คเกจ (ไม่จำเป็นต้องทำขั้นตอนที่ 4 ในส่วนก่อนหน้า) อย่างไรก็ตาม คุณสามารถจัดเตรียมแฟล็ก CMake เพิ่มเติมผ่านตัวแปรสภาพแวดล้อมตามที่อธิบายไว้ในขั้นตอนที่ 3 ของส่วนการสร้างด้วยตนเอง หากไม่มีการระบุไว้ สคริปต์ CMake ของ OpenCV จะพยายามค้นหาและเปิดใช้งานการอ้างอิงที่เหมาะสม การแจกแจงแบบไม่มีส่วนหัวมีการตั้งค่าสถานะ CMake แบบฮาร์ดโค้ดซึ่งจะปิดใช้งานการขึ้นต่อกันของ GUI ที่เป็นไปได้ทั้งหมด
บนระบบที่ช้า เช่น Raspberry Pi การสร้างแบบเต็มอาจใช้เวลาหลายชั่วโมง บน 8-core Ryzen 7 3700X การสร้างใช้เวลาประมาณ 6 นาที
แพ็คเกจ Opencv-python (สคริปต์ในพื้นที่เก็บข้อมูลนี้) มีให้บริการภายใต้ใบอนุญาต MIT
OpenCV นั้นมีให้ใช้งานภายใต้ลิขสิทธิ์ Apache 2
ใบอนุญาตแพ็คเกจของบุคคลที่สามอยู่ที่ LICENSE-3RD-PARTY.txt
ล้อทั้งหมดจัดส่งด้วย FFmpeg ที่ได้รับอนุญาตภายใต้ LGPLv2.1
ล้อ Linux ที่ไม่มีหัวจัดส่งพร้อม Qt 5 ที่ได้รับอนุญาตภายใต้ LGPLv3
แพ็คเกจนี้รวมถึงไบนารีอื่น ๆ ด้วย รายชื่อใบอนุญาตทั้งหมดสามารถดูได้จาก LICENSE-3RD-PARTY.txt
สคริปต์ find_version.py
ค้นหาข้อมูลเวอร์ชันจากแหล่งที่มาของ OpenCV และผนวกหมายเลขการแก้ไขเฉพาะสำหรับที่เก็บนี้เข้ากับสตริงเวอร์ชัน โดยจะบันทึกข้อมูลเวอร์ชันลงในไฟล์ version.py
ภายใต้ cv2
นอกเหนือจากแฟล็กอื่นๆ
มีการสร้างการเปิดตัวและอัปโหลดไปยัง PyPI เมื่อมีการพุชแท็กใหม่ไปยังสาขาหลัก แท็กเหล่านี้แยกความแตกต่างของแพ็คเกจ (repo นี้อาจมีการแก้ไข แต่เวอร์ชัน OpenCV ยังคงเหมือนเดิม) และควรเพิ่มขึ้นตามลำดับ ในทางปฏิบัติ หมายเลขเวอร์ชันที่วางจำหน่ายจะมีลักษณะดังนี้:
cv_major.cv_minor.cv_revision.package_revision
เช่น 3.1.0.0
สาขาหลักเป็นไปตามการเปิดตัวสาขาหลักของ OpenCV เวอร์ชัน 3.4 เป็นไปตามการเปิดตัวแก้ไขข้อบกพร่องของ OpenCV 3.4
ทุกความมุ่งมั่นในสาขาหลักของ repo นี้จะถูกสร้าง สิ่งประดิษฐ์บิลด์ที่เป็นไปได้ใช้ตัวระบุเวอร์ชันในเครื่อง:
cv_major.cv_minor.cv_revision+git_hash_of_this_repo
เช่น 3.1.0+14a8d39
สิ่งประดิษฐ์เหล่านี้ไม่สามารถและจะไม่ถูกอัปโหลดไปยัง PyPI
ล้อ Linux ถูกสร้างขึ้นโดยใช้ manylinux2014 ล้อเหล่านี้ควรใช้งานได้นอกกรอบสำหรับ distros ส่วนใหญ่ (ซึ่งใช้ไลบรารีมาตรฐาน GNU C) เนื่องจากสร้างขึ้นจาก glibc เวอร์ชันเก่า
อิมเมจเริ่มต้นของ manylinux2014
ได้รับการขยายด้วยการพึ่งพา OpenCV บางอย่าง ดูโฟลเดอร์ Docker สำหรับข้อมูลเพิ่มเติม
ล้อที่สร้างไว้ล่วงหน้าที่เข้ากันได้กับ Python 3.x มีให้สำหรับเวอร์ชัน Python ที่รองรับอย่างเป็นทางการ (ไม่ใช่ใน EOL):
เริ่มต้นตั้งแต่ 4.2.0 และ 3.4.9 บิวด์ สภาพแวดล้อมบิวด์ macOS Travis ได้รับการอัพเดตเป็น XCode 9.4 การเปลี่ยนแปลงดังกล่าวทำให้การรองรับ macOS เวอร์ชันเก่ากว่า 10.13 ลดลงอย่างมีประสิทธิภาพ
เริ่มต้นจากรุ่น 4.3.0 และ 3.4.10 บิลด์สภาพแวดล้อม Linux build ได้รับการอัพเดตจาก manylinux1
เป็น manylinux2014
สิ่งนี้ทำให้การสนับสนุน Linux รุ่นเก่าลดลง
เริ่มต้นจากเวอร์ชัน 4.7.0 สภาพแวดล้อมการสร้างการกระทำของ Mac OS GitHub ได้รับการอัปเดตเป็นเวอร์ชัน 11 การสนับสนุน Mac OS 10.x ถูกยกเลิก ดูการกระทำ/runner-images#5583
เริ่มต้นจากเวอร์ชัน 4.9.0 สภาพแวดล้อมการสร้างการกระทำของ Mac OS GitHub ได้รับการอัปเดตเป็นเวอร์ชัน 12 การสนับสนุน Mac OS 10.x เลิกใช้โดย Brew และแพ็คเกจที่ใช้ส่วนใหญ่