====== Kamera Basler u robotů CRS ======
**Programové rozhraní v jazyce Python**
===== Základní informace o kamerách =====
Pracoviště robotu CRS93 a CRS97 je osazeno barevnou kamerou s rozlišením 1920x1200 pixels.
Kamera je umístěna nad pracovní plochou a směřuje kolmo dolů k pracovní ploše.
Na pracovištích jsou umístěny kamery stejného typu od firmy [[https://www.baslerweb.com/en/| Basler]]:
* **Typ:** [[https://www.baslerweb.com/en/shop/a2a1920-51gcbas/ | ace 2, a2A1920-51gcBAS]]
* **Rozlyšení:** 1920 x 1200 bodů
* **Rozhraní:** GigE (Ethernet)
Kamery na jednotlivých pracovištích lze identifikovat buď jménem, nebo IP adresou:
^ Robot ^ Jméno kamery ^ IP adresa ^
| CRS93 | camera-crs93 | 192.168.137.107 |
| CRS97 | camera-crs97 | 192.168.137.106 |
| RV6S | camera-rv6s | 192.168.137.109 |
Pro ověření funkčnosti kamer, získání obrázků a případnou práci s nastavením je možné použít program
[[https://www.baslerweb.com/en/software/pylon/pylon-viewer/|pylon Viewer]]. Program pylon Viewer spustíte
příkazem **/opt/pylon/bin/pylonviewer**. Je třeba míti na paměti:
* Program pylon Viewer se spouští velmi pomalu (desítky sekund).
* **Pokud je kamera otevřena jedním programem, pak jí již nelze znovu otevřít v programu jiném.**
===== Programové rozhraní kamery =====
Firmy Basler pro připojení svých kamer dodává softwarové rozhraní pod označením [[https://www.baslerweb.com/en/software/pylon/|Pylon]].
Jede o celou řadu nástrojů včetně programů pro nastavení kamer, snímání obrazu a SDK pro C++, .Net/C# and C.
Pro jazyk Python existuje rozraní "pypylon: Basler's pylon Software Suite Interface for Python", [[https://github.com/basler/pypylon]].
Pro práci v rámci řešení úlohy v předmětu Robotika nabízíme zjednodušené rozhraní, které tvoří třída **BaslerCamera**:
* Příslušný zdrojový kód tvoří soubor {{ :courses:b3b33rob1:common:basler_camera.py | basler_camera.py}}.
* Automaticky generovaná dokumentace {{ :courses:b3b33rob1:common:cameraforcrs.pdf |PDF soubor}}.
===== Příklad získání jednoho snímku z kamery =====
Zdrojový kód tohoto příkladu je k dispozici {{ :courses:b3b33rob1:common:test_camera.py | test_camera.py}}.
Před použitím si nezapomeňte stáhnout {{ :courses:b3b33rob1:common:basler_camera.py | basler_camera.py}}.
# OpenCV library for image processing
import cv2
# Our Basler camera interface
from basler_camera import BaslerCamera
def main():
camera: BaslerCamera = BaslerCamera()
# Camera can be connected based on its' IP or name:
# Camera for robot CRS 93
# camera.connect_by_ip("192.168.137.107")
# camera.connect_by_name("camera-crs93")
# Camera for robot CRS 97
# camera.connect_by_ip("192.168.137.106")
# camera.connect_by_name("camera-crs97")
camera.connect_by_name("camera-crs97")
# Open the communication with the camera
camera.open()
# Set capturing parameters from the camera object.
# The default parameters (set by constructor) are OK.
# When starting the params should be send into the camera.
camera.set_parameters()
# Take one image from the camera
img = camera.grab_image()
# If the returned image has zero size,
# the image was not captured in time.
if (img is not None) and (img.size > 0):
# Show the image in OpenCV
cv2.namedWindow('Camera image', cv2.WINDOW_NORMAL)
cv2.imshow('Camera image', img)
cv2.waitKey(0)
else:
print("The image was not captured.")
# Close communication with the camera before finish.
camera.close()
if __name__ == '__main__':
main()