adafruit / Adafruit_CircuitPython_OV2640

CircuitPython driver for OV2640 cameras
MIT License
10 stars 3 forks source link

ImportError: no module named 'imagecapture' #23

Closed algorni closed 1 year ago

algorni commented 1 year ago

Trying using this library on ESP32-CAM with ESP-eye firmware and getting this error:

code.py output: Traceback (most recent call last): File "code.py", line 10, in File "adafruit_ov2640.py", line 38, in ImportError: no module named 'imagecapture'

algorni commented 1 year ago

That's the code i'm tring to execute

    import board
    import sys
    import busio
    import binascii
    import time
    import ssl
    import wifi
    import socketpool
    import adafruit_minimqtt.adafruit_minimqtt as MQTT
    import adafruit_ov2640

    ### Code ###
    # Define callback methods which are called when events occur
    # pylint: disable=unused-argument, redefined-outer-name
    def connect(mqtt_client, userdata, flags, rc):
        # This function will be called when the mqtt_client is connected
        # successfully to the broker.
        print("Connected to MQTT Broker!")
        print("Flags: {0}\n RC: {1}".format(flags, rc))

    def disconnect(mqtt_client, userdata, rc):
        # This method is called when the mqtt_client disconnects
        # from the broker.
        print("Disconnected from MQTT Broker!")

    def subscribe(mqtt_client, userdata, topic, granted_qos):
        # This method is called when the mqtt_client subscribes to a new feed.
        print("Subscribed to {0} with QOS level {1}".format(topic, granted_qos))

    def unsubscribe(mqtt_client, userdata, topic, pid):
        # This method is called when the mqtt_client unsubscribes from a feed.
        print("Unsubscribed from {0} with PID {1}".format(topic, pid))

    def publish(mqtt_client, userdata, topic, pid):
        # This method is called when the mqtt_client publishes data to a feed.
        print("Published to {0} with PID {1}".format(topic, pid))

    def message(client, topic, message):
        # Method called when a client's subscribed feed has a new value.
        print("New message on topic {0}: {1}".format(topic, message))

    print("Hello World!")

    # Create a socket pool
    pool = socketpool.SocketPool(wifi.radio)

    print("Connecting to local MQTT Broker")
    mqtt_client = MQTT.MQTT(
        broker="192.168.1.90",     
        port=1883,
        socket_pool=pool,
        ssl_context=ssl.create_default_context(),
    )

    # Connect callback handlers to mqtt_client
    mqtt_client.on_connect = connect
    mqtt_client.on_disconnect = disconnect
    mqtt_client.on_subscribe = subscribe
    mqtt_client.on_unsubscribe = unsubscribe
    mqtt_client.on_publish = publish
    mqtt_client.on_message = message

    print("Connecting")

    mqtt_client.connect()

    print("Connected")

    bus = busio.I2C(scl=board.CAMERA_SIOC, sda=board.CAMERA_SIOD)
    cam = adafruit_ov2640.OV2640(
        bus,
        data_pins=board.CAMERA_DATA,
        clock=board.CAMERA_PCLK,
        vsync=board.CAMERA_VSYNC,
        href=board.CAMERA_HREF,
        mclk=board.CAMERA_XCLK,
        mclk_frequency=20_000_000,
        size=adafruit_ov2640.OV2640_SIZE_QVGA,
    )

    cam.flip_x = False
    cam.flip_y = False
    cam.test_pattern = False

    cam.size = adafruit_ov2640.OV2640_SIZE_SVGA
    cam.colorspace = adafruit_ov2640.OV2640_COLOR_JPEG
    jpeg_buffer = bytearray(cam.capture_buffer_size)

    while True:
        jpeg = cam.capture(jpeg_buffer)
        print(f"Captured {len(jpeg)} bytes of jpeg data")

        # b2a_base64() appends a trailing newline, which IO does not like
        encoded_data = binascii.b2a_base64(jpeg).strip()
        print(f"Expanded to {len(encoded_data)} for IO upload")

        io.publish("esp-32-cam/image", encoded_data)

        print("Waiting 3s")
        time.sleep(3)
jepler commented 1 year ago

Yes, that is expected. I answered earlier in detail in the other issue you opened: https://github.com/adafruit/Adafruit_CircuitPython_OV2640/issues/22