├── requirements.txt ├── temp.png ├── src ├── sample_pic.png ├── picture_drop.py └── video_stream.py ├── picture_requirements.txt ├── output.txt ├── environment.yml ├── README.md ├── camera_requirements.txt └── live_camera_requirements.txt /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | imageio[ffmpeg] 3 | imageio-ffmpeg -------------------------------------------------------------------------------- /temp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneInterface/realtime-bakllava/HEAD/temp.png -------------------------------------------------------------------------------- /src/sample_pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneInterface/realtime-bakllava/HEAD/src/sample_pic.png -------------------------------------------------------------------------------- /picture_requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.26.0 2 | base64==0.1.0 3 | io==0.0.1 4 | json==0.1.0 5 | argparse==1.4.0 -------------------------------------------------------------------------------- /src/picture_drop.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import base64 3 | import io 4 | import json 5 | import argparse 6 | 7 | url = "http://localhost:8080/completion" 8 | headers = {"Content-Type": "application/json"} 9 | 10 | # Create the parser and add argument 11 | parser = argparse.ArgumentParser() 12 | parser.add_argument('--path', required=True, help='Path to the image file') 13 | args = parser.parse_args() 14 | 15 | # Open the image file in binary mode and convert to base64 16 | with open(args.path, 'rb') as file: 17 | encoded_string = base64.b64encode(file.read()).decode('utf-8') 18 | 19 | image_data = [{"data": encoded_string, "id": 12}] 20 | 21 | data = {"prompt": "USER:[img-12]Describe the image.\nASSISTANT:", "n_predict": 128, "image_data": image_data, "stream": True} 22 | 23 | response = requests.post(url, headers=headers, json=data, stream=True) 24 | print("Sent request to the server...") 25 | print() 26 | for chunk in response.iter_content(chunk_size=128): 27 | content = chunk.decode().strip().split('\n\n')[0] 28 | try: 29 | content_split = content.split('data: ') 30 | if len(content_split) > 1: 31 | content_json = json.loads(content_split[1]) 32 | print(content_json["content"], end='', flush=True) 33 | except json.JSONDecodeError: 34 | break 35 | -------------------------------------------------------------------------------- /output.txt: -------------------------------------------------------------------------------- 1 | ------------------------------ 2 | 3 | The image shows two young men standing in a room. One of them is wearing a white t-shirt with a polo emblem on it, while the other one is partially visible at the edge of the frame. They seem to be engaged in a conversation or possibly observing something together. 4 | 5 | In addition to the two people, there are three small figures of men located towards the upper right corner of the image, which might be either decorations or part of a painting. The room also features a clock on the wall and a bottle placed nearby.------------------------------ 6 | 7 | ------------------------------ 8 | 9 | The image captures a man standing in an empty room with pink walls. He is wearing a white polo shirt and appears to have a surprised or unusual look on his face. The man is positioned close to the left side of the frame, occupying the majority of the vertical space in the image. 10 | 11 | In the room, there are two cups placed near each other at the top right corner. A clock can be seen hanging on the wall above and slightly to the right of the man. Additionally, a small portion of another person is visible in the upper left part of the scene, but their presence is not significant in the image------------------------------ 12 | 13 | The image features a man standing in a room with a pinkish hue. He is wearing a white shirt and looking directly into the camera, giving an intense stare. Another person is partially visible on the right side of the frame, but their features are not prominent. 14 | 15 | A clock can be seen hanging on the wall near the left edge of the image. The overall atmosphere of -------------------------------------------------------------------------------- /src/video_stream.py: -------------------------------------------------------------------------------- 1 | import os 2 | # Change paht to ffmpeg if needed 3 | # os.environ["IMAGEIO_FFMPEG_EXE"] = "/path_to/ffmpeg" 4 | 5 | 6 | import requests 7 | import time 8 | from PIL import Image 9 | import base64 10 | import io 11 | import imageio 12 | import json 13 | 14 | url = "http://localhost:8080/completion" 15 | headers = {"Content-Type": "application/json"} 16 | 17 | print("Starting video stream... Wait for a few seconds for the stream to the output to start generating.") 18 | cap = imageio.get_reader('') 19 | 20 | 21 | 22 | while True: 23 | # Capture frame-by-frame 24 | frame = cap.get_next_data() 25 | # Save the image to a file 26 | imageio.imsave('temp.png', frame) 27 | # Open the file in binary mode and convert to base64 28 | with open('temp.png', 'rb') as file: 29 | encoded_string = base64.b64encode(file.read()).decode('utf-8') 30 | 31 | image_data = [{"data": encoded_string, "id": 12}] 32 | 33 | data = {"prompt": "USER:[img-12]Describe the image.\nASSISTANT:", "n_predict": 128, "image_data": image_data, "stream": True} 34 | 35 | response = requests.post(url, headers=headers, json=data, stream=True) 36 | 37 | with open("output.txt", "a") as write_file: 38 | write_file.write("---"*10 + "\n\n") 39 | 40 | for chunk in response.iter_content(chunk_size=128): 41 | with open("output.txt", "a") as write_file: 42 | content = chunk.decode().strip().split('\n\n')[0] 43 | try: 44 | content_split = content.split('data: ') 45 | if len(content_split) > 1: 46 | content_json = json.loads(content_split[1]) 47 | write_file.write(content_json["content"]) 48 | print(content_json["content"], end='', flush=True) 49 | write_file.flush() # Save the file after every chunk 50 | except json.JSONDecodeError: 51 | print("JSONDecodeError: Expecting property name enclosed in double quotes") 52 | 53 | cap.close() 54 | -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | name: cvv 2 | channels: 3 | - conda-forge 4 | - defaults 5 | dependencies: 6 | - aom=3.5.0=h7ea286d_0 7 | - bzip2=1.0.8=h3422bc3_4 8 | - c-ares=1.18.1=h3422bc3_0 9 | - ca-certificates=2022.9.24=h4653dfc_0 10 | - cairo=1.16.0=h73a0509_1014 11 | - expat=2.5.0=hb7217d7_0 12 | - ffmpeg=5.1.2=gpl_hf4c414c_103 13 | - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 14 | - font-ttf-inconsolata=3.000=h77eed37_0 15 | - font-ttf-source-code-pro=2.038=h77eed37_0 16 | - font-ttf-ubuntu=0.83=hab24e00_0 17 | - fontconfig=2.14.1=h82840c6_0 18 | - fonts-conda-ecosystem=1=0 19 | - fonts-conda-forge=1=0 20 | - freetype=2.12.1=hd633e50_0 21 | - gettext=0.21.1=h0186832_0 22 | - gmp=6.2.1=h9f76cd9_0 23 | - gnutls=3.7.8=h9f1a10d_0 24 | - graphite2=1.3.13=h9f76cd9_1001 25 | - harfbuzz=5.3.0=hddbc195_0 26 | - hdf5=1.12.2=nompi_h33dac16_100 27 | - icu=70.1=h6b3803e_0 28 | - jasper=2.0.33=hba35424_0 29 | - jpeg=9e=he4db4b2_2 30 | - krb5=1.19.3=he492e65_0 31 | - lame=3.100=h1a8c8d9_1003 32 | - lerc=4.0.0=h9a09cb3_0 33 | - libblas=3.9.0=16_osxarm64_openblas 34 | - libcblas=3.9.0=16_osxarm64_openblas 35 | - libcurl=7.86.0=h1c293e1_1 36 | - libcxx=14.0.6=h2692d47_0 37 | - libdeflate=1.14=h1a8c8d9_0 38 | - libedit=3.1.20191231=hc8eb9b7_2 39 | - libev=4.33=h642e427_1 40 | - libffi=3.4.2=h3422bc3_5 41 | - libgfortran=5.0.0=11_3_0_hd922786_26 42 | - libgfortran5=11.3.0=hdaf2cc0_26 43 | - libglib=2.74.1=h4646484_1 44 | - libiconv=1.17=he4db4b2_0 45 | - libidn2=2.3.4=h1a8c8d9_0 46 | - liblapack=3.9.0=16_osxarm64_openblas 47 | - liblapacke=3.9.0=16_osxarm64_openblas 48 | - libnghttp2=1.47.0=h519802c_1 49 | - libopenblas=0.3.21=openmp_hc731615_3 50 | - libopencv=4.6.0=py38h6e4ee2f_6 51 | - libpng=1.6.38=h76d750c_0 52 | - libprotobuf=3.21.9=hb5ab8b9_0 53 | - libsqlite=3.40.0=h76d750c_0 54 | - libssh2=1.10.0=h7a5bd25_3 55 | - libtasn1=4.19.0=h1a8c8d9_0 56 | - libtiff=4.4.0=hfa0b094_4 57 | - libunistring=0.9.10=h3422bc3_0 58 | - libvpx=1.11.0=hc470f4d_3 59 | - libwebp-base=1.2.4=h57fd34a_0 60 | - libxml2=2.10.3=h87b0503_0 61 | - libzlib=1.2.13=h03a7124_4 62 | - llvm-openmp=15.0.5=h7cfbb63_0 63 | - ncurses=6.3=h07bb92c_1 64 | - nettle=3.8.1=h63371fa_1 65 | - numpy=1.23.4=py38h09ac2d9_1 66 | - opencv=4.6.0=py38h150bfb4_6 67 | - openh264=2.3.1=hb7217d7_1 68 | - openssl=3.0.7=h03a7124_0 69 | - p11-kit=0.24.1=h29577a5_0 70 | - pcre2=10.40=hb34f9b4_0 71 | - pip=22.3.1=pyhd8ed1ab_0 72 | - pixman=0.40.0=h27ca646_0 73 | - py-opencv=4.6.0=py38hfbcc8b7_6 74 | - python=3.8.13=hd3575e6_0_cpython 75 | - python_abi=3.8=2_cp38 76 | - readline=8.1.2=h46ed386_0 77 | - setuptools=65.5.1=pyhd8ed1ab_0 78 | - sqlite=3.40.0=h2229b38_0 79 | - svt-av1=1.3.0=h7ea286d_0 80 | - tk=8.6.12=he1e0b03_0 81 | - wheel=0.38.4=pyhd8ed1ab_0 82 | - x264=1!164.3095=h57fd34a_2 83 | - x265=3.5=hbc6ce65_3 84 | - xz=5.2.6=h57fd34a_0 85 | - zlib=1.2.13=h03a7124_4 86 | - zstd=1.5.2=h8128057_4 87 | - pip: 88 | - certifi==2023.7.22 89 | - charset-normalizer==3.3.2 90 | - idna==3.4 91 | - pillow==10.1.0 92 | - requests==2.31.0 93 | - urllib3==2.0.7 94 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🍰 Bakllava Llama C++ Tutorial 🦙 2 | 3 | Welcome to the delicious world of Bakllava Llama with C++! Follow these steps to get your code running and indulge in AI sweetness! 😋 4 | 5 | 🚨 Properly tested only with Apple silicon chip 6 | 7 | [youtube installation guide](https://youtu.be/UyRFbGK9QmI) 8 | 9 | similar relevant project: [Be My Eyes" web app](https://github.com/lxe/llavavision#getting-started) 10 | 11 | 12 | 13 | 14 | 15 | ## 🚀 Step 1: Install Llama C++ 16 | 17 | First things first, let's get the Llama C++ installed. 18 | 19 | 🔗 Clone the repository from GitHub: 20 | ```jsx 21 | git clone https://github.com/ggerganov/llama.cpp 22 | cd llama.cpp 23 | ``` 24 | ### On Linux & macOS: 25 | 🛠 Build with make: 26 | ``` 27 | make 28 | ``` 29 | 🏗 Or, if you prefer cmake: 30 | ``` 31 | cmake --build . --config Release 32 | ``` 33 | 34 | ## 📦 Step 2: Download the Model! 35 | 1. 📥 Download from Hugging Face - [mys/ggml_bakllava-1](https://huggingface.co/mys/ggml_bakllava-1/tree/main) this 2 files: 36 | * 🌟 ggml-model-q4_k.gguf (or any other quantized model) - only one is required! 37 | * 🧊 mmproj-model-f16.gguf 38 | 39 | 2. ✂️ Copy the paths of those 2 files. 40 | 3. 🏃‍♂️ Run this in the llama.cpp repository (replace YOUR_PATH with the paths to the files you downloaded): 41 | 42 | #### macOS 43 | ``` 44 | ./server -m YOUR_PATH/ggml-model-q4_k.gguf --mmproj YOUR_PATH/mmproj-model-f16.gguf -ngl 1 45 | ``` 46 | #### Windows 47 | ``` 48 | server.exe -m REPLACE_WITH_YOUR_PATH\ggml-model-q4_k.gguf --mmproj REPLACE_WITH_YOUR_PATH\mmproj-model-f16.gguf -ngl 1 49 | 50 | ``` 51 | 4. 🎉 The llama server is now up and running! 52 | 53 | ⚠️ NOTE: Keep the server running in the background. 54 | 5. 📹 Let's run the script to use the webcam or send it a single picture! 55 | 56 | ## 🏃‍♀️ Step 3: Running the Demo 57 | Open a new terminal window and clone the demo app: 58 | ``` 59 | git clone https://github.com/Fuzzy-Search/realtime-bakllava.git 60 | cd realtime-bakllava 61 | ``` 62 | ### 🛠 (Optional) Create a new Python virtual environment and activate it 63 | ``` 64 | python3 -m venv bakllava-venv 65 | source bakllava-venv/bin/activate 66 | pip3 install -r requirements.txt 67 | ``` 68 | ### 🎥 Webcam Script 69 | To start streaming from your webcam: 70 | 71 | ! if you have problem with FFMPEG lib, download the source code and in file src/video_stream.py modify second line of code 72 | 73 | ``` 74 | python3 src/video_stream.py 75 | ``` 76 | 77 | ### 🖼 Simple Picture Drop 78 | ![Export-1699182386675](https://github.com/Fuzzy-Search/realtime-bakllava/assets/40468118/cc2384d9-1e16-4e94-a02c-47bd703d8ed7) 79 | 80 | ``` 81 | pip install -r picture_requirements.txt 82 | python src/picture_drop.py --path src/sample_pic.png 83 | ``` 84 | 85 | 86 | ## 📝 Enjoy your adventure with Llama C++! 🚀🦙 87 | 88 | ## Star History 89 | 90 | [![Star History Chart](https://api.star-history.com/svg?repos=Fuzzy-Search/realtime-bakllava&type=Date)](https://star-history.com/#Fuzzy-Search/realtime-bakllava&Date) 91 | -------------------------------------------------------------------------------- /camera_requirements.txt: -------------------------------------------------------------------------------- 1 | # packages in environment at /Users/robertlukoshko/mambaforge/envs/cvv: 2 | # 3 | # Name Version Build Channel 4 | aom 3.5.0 h7ea286d_0 conda-forge 5 | bzip2 1.0.8 h3422bc3_4 conda-forge 6 | c-ares 1.18.1 h3422bc3_0 conda-forge 7 | ca-certificates 2022.9.24 h4653dfc_0 conda-forge 8 | cairo 1.16.0 h73a0509_1014 conda-forge 9 | certifi 2023.7.22 pypi_0 pypi 10 | charset-normalizer 3.3.2 pypi_0 pypi 11 | expat 2.5.0 hb7217d7_0 conda-forge 12 | ffmpeg 5.1.2 gpl_hf4c414c_103 conda-forge 13 | font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge 14 | font-ttf-inconsolata 3.000 h77eed37_0 conda-forge 15 | font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge 16 | font-ttf-ubuntu 0.83 hab24e00_0 conda-forge 17 | fontconfig 2.14.1 h82840c6_0 conda-forge 18 | fonts-conda-ecosystem 1 0 conda-forge 19 | fonts-conda-forge 1 0 conda-forge 20 | freetype 2.12.1 hd633e50_0 conda-forge 21 | gettext 0.21.1 h0186832_0 conda-forge 22 | gmp 6.2.1 h9f76cd9_0 conda-forge 23 | gnutls 3.7.8 h9f1a10d_0 conda-forge 24 | graphite2 1.3.13 h9f76cd9_1001 conda-forge 25 | harfbuzz 5.3.0 hddbc195_0 conda-forge 26 | hdf5 1.12.2 nompi_h33dac16_100 conda-forge 27 | icu 70.1 h6b3803e_0 conda-forge 28 | idna 3.4 pypi_0 pypi 29 | jasper 2.0.33 hba35424_0 conda-forge 30 | jpeg 9e he4db4b2_2 conda-forge 31 | krb5 1.19.3 he492e65_0 conda-forge 32 | lame 3.100 h1a8c8d9_1003 conda-forge 33 | lerc 4.0.0 h9a09cb3_0 conda-forge 34 | libblas 3.9.0 16_osxarm64_openblas conda-forge 35 | libcblas 3.9.0 16_osxarm64_openblas conda-forge 36 | libcurl 7.86.0 h1c293e1_1 conda-forge 37 | libcxx 14.0.6 h2692d47_0 conda-forge 38 | libdeflate 1.14 h1a8c8d9_0 conda-forge 39 | libedit 3.1.20191231 hc8eb9b7_2 conda-forge 40 | libev 4.33 h642e427_1 conda-forge 41 | libffi 3.4.2 h3422bc3_5 conda-forge 42 | libgfortran 5.0.0 11_3_0_hd922786_26 conda-forge 43 | libgfortran5 11.3.0 hdaf2cc0_26 conda-forge 44 | libglib 2.74.1 h4646484_1 conda-forge 45 | libiconv 1.17 he4db4b2_0 conda-forge 46 | libidn2 2.3.4 h1a8c8d9_0 conda-forge 47 | liblapack 3.9.0 16_osxarm64_openblas conda-forge 48 | liblapacke 3.9.0 16_osxarm64_openblas conda-forge 49 | libnghttp2 1.47.0 h519802c_1 conda-forge 50 | libopenblas 0.3.21 openmp_hc731615_3 conda-forge 51 | libopencv 4.6.0 py38h6e4ee2f_6 conda-forge 52 | libpng 1.6.38 h76d750c_0 conda-forge 53 | libprotobuf 3.21.9 hb5ab8b9_0 conda-forge 54 | libsqlite 3.40.0 h76d750c_0 conda-forge 55 | libssh2 1.10.0 h7a5bd25_3 conda-forge 56 | libtasn1 4.19.0 h1a8c8d9_0 conda-forge 57 | libtiff 4.4.0 hfa0b094_4 conda-forge 58 | libunistring 0.9.10 h3422bc3_0 conda-forge 59 | libvpx 1.11.0 hc470f4d_3 conda-forge 60 | libwebp-base 1.2.4 h57fd34a_0 conda-forge 61 | libxml2 2.10.3 h87b0503_0 conda-forge 62 | libzlib 1.2.13 h03a7124_4 conda-forge 63 | llvm-openmp 15.0.5 h7cfbb63_0 conda-forge 64 | ncurses 6.3 h07bb92c_1 conda-forge 65 | nettle 3.8.1 h63371fa_1 conda-forge 66 | numpy 1.23.4 py38h09ac2d9_1 conda-forge 67 | opencv 4.6.0 py38h150bfb4_6 conda-forge 68 | openh264 2.3.1 hb7217d7_1 conda-forge 69 | openssl 3.0.7 h03a7124_0 conda-forge 70 | p11-kit 0.24.1 h29577a5_0 conda-forge 71 | pcre2 10.40 hb34f9b4_0 conda-forge 72 | pillow 10.1.0 pypi_0 pypi 73 | pip 22.3.1 pyhd8ed1ab_0 conda-forge 74 | pixman 0.40.0 h27ca646_0 conda-forge 75 | py-opencv 4.6.0 py38hfbcc8b7_6 conda-forge 76 | python 3.8.13 hd3575e6_0_cpython conda-forge 77 | python_abi 3.8 2_cp38 conda-forge 78 | readline 8.1.2 h46ed386_0 conda-forge 79 | requests 2.31.0 pypi_0 pypi 80 | setuptools 65.5.1 pyhd8ed1ab_0 conda-forge 81 | sqlite 3.40.0 h2229b38_0 conda-forge 82 | svt-av1 1.3.0 h7ea286d_0 conda-forge 83 | tk 8.6.12 he1e0b03_0 conda-forge 84 | urllib3 2.0.7 pypi_0 pypi 85 | wheel 0.38.4 pyhd8ed1ab_0 conda-forge 86 | x264 1!164.3095 h57fd34a_2 conda-forge 87 | x265 3.5 hbc6ce65_3 conda-forge 88 | xz 5.2.6 h57fd34a_0 conda-forge 89 | zlib 1.2.13 h03a7124_4 conda-forge 90 | zstd 1.5.2 h8128057_4 conda-forge 91 | -------------------------------------------------------------------------------- /live_camera_requirements.txt: -------------------------------------------------------------------------------- 1 | # packages in environment at /Users/robertlukoshko/mambaforge/envs/cvv: 2 | # 3 | # Name Version Build Channel 4 | aom 3.5.0 h7ea286d_0 conda-forge 5 | bzip2 1.0.8 h3422bc3_4 conda-forge 6 | c-ares 1.18.1 h3422bc3_0 conda-forge 7 | ca-certificates 2022.9.24 h4653dfc_0 conda-forge 8 | cairo 1.16.0 h73a0509_1014 conda-forge 9 | certifi 2023.7.22 pypi_0 pypi 10 | charset-normalizer 3.3.2 pypi_0 pypi 11 | expat 2.5.0 hb7217d7_0 conda-forge 12 | ffmpeg 5.1.2 gpl_hf4c414c_103 conda-forge 13 | font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge 14 | font-ttf-inconsolata 3.000 h77eed37_0 conda-forge 15 | font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge 16 | font-ttf-ubuntu 0.83 hab24e00_0 conda-forge 17 | fontconfig 2.14.1 h82840c6_0 conda-forge 18 | fonts-conda-ecosystem 1 0 conda-forge 19 | fonts-conda-forge 1 0 conda-forge 20 | freetype 2.12.1 hd633e50_0 conda-forge 21 | gettext 0.21.1 h0186832_0 conda-forge 22 | gmp 6.2.1 h9f76cd9_0 conda-forge 23 | gnutls 3.7.8 h9f1a10d_0 conda-forge 24 | graphite2 1.3.13 h9f76cd9_1001 conda-forge 25 | harfbuzz 5.3.0 hddbc195_0 conda-forge 26 | hdf5 1.12.2 nompi_h33dac16_100 conda-forge 27 | icu 70.1 h6b3803e_0 conda-forge 28 | idna 3.4 pypi_0 pypi 29 | jasper 2.0.33 hba35424_0 conda-forge 30 | jpeg 9e he4db4b2_2 conda-forge 31 | krb5 1.19.3 he492e65_0 conda-forge 32 | lame 3.100 h1a8c8d9_1003 conda-forge 33 | lerc 4.0.0 h9a09cb3_0 conda-forge 34 | libblas 3.9.0 16_osxarm64_openblas conda-forge 35 | libcblas 3.9.0 16_osxarm64_openblas conda-forge 36 | libcurl 7.86.0 h1c293e1_1 conda-forge 37 | libcxx 14.0.6 h2692d47_0 conda-forge 38 | libdeflate 1.14 h1a8c8d9_0 conda-forge 39 | libedit 3.1.20191231 hc8eb9b7_2 conda-forge 40 | libev 4.33 h642e427_1 conda-forge 41 | libffi 3.4.2 h3422bc3_5 conda-forge 42 | libgfortran 5.0.0 11_3_0_hd922786_26 conda-forge 43 | libgfortran5 11.3.0 hdaf2cc0_26 conda-forge 44 | libglib 2.74.1 h4646484_1 conda-forge 45 | libiconv 1.17 he4db4b2_0 conda-forge 46 | libidn2 2.3.4 h1a8c8d9_0 conda-forge 47 | liblapack 3.9.0 16_osxarm64_openblas conda-forge 48 | liblapacke 3.9.0 16_osxarm64_openblas conda-forge 49 | libnghttp2 1.47.0 h519802c_1 conda-forge 50 | libopenblas 0.3.21 openmp_hc731615_3 conda-forge 51 | libopencv 4.6.0 py38h6e4ee2f_6 conda-forge 52 | libpng 1.6.38 h76d750c_0 conda-forge 53 | libprotobuf 3.21.9 hb5ab8b9_0 conda-forge 54 | libsqlite 3.40.0 h76d750c_0 conda-forge 55 | libssh2 1.10.0 h7a5bd25_3 conda-forge 56 | libtasn1 4.19.0 h1a8c8d9_0 conda-forge 57 | libtiff 4.4.0 hfa0b094_4 conda-forge 58 | libunistring 0.9.10 h3422bc3_0 conda-forge 59 | libvpx 1.11.0 hc470f4d_3 conda-forge 60 | libwebp-base 1.2.4 h57fd34a_0 conda-forge 61 | libxml2 2.10.3 h87b0503_0 conda-forge 62 | libzlib 1.2.13 h03a7124_4 conda-forge 63 | llvm-openmp 15.0.5 h7cfbb63_0 conda-forge 64 | ncurses 6.3 h07bb92c_1 conda-forge 65 | nettle 3.8.1 h63371fa_1 conda-forge 66 | numpy 1.23.4 py38h09ac2d9_1 conda-forge 67 | opencv 4.6.0 py38h150bfb4_6 conda-forge 68 | openh264 2.3.1 hb7217d7_1 conda-forge 69 | openssl 3.0.7 h03a7124_0 conda-forge 70 | p11-kit 0.24.1 h29577a5_0 conda-forge 71 | pcre2 10.40 hb34f9b4_0 conda-forge 72 | pillow 10.1.0 pypi_0 pypi 73 | pip 22.3.1 pyhd8ed1ab_0 conda-forge 74 | pixman 0.40.0 h27ca646_0 conda-forge 75 | py-opencv 4.6.0 py38hfbcc8b7_6 conda-forge 76 | python 3.8.13 hd3575e6_0_cpython conda-forge 77 | python_abi 3.8 2_cp38 conda-forge 78 | readline 8.1.2 h46ed386_0 conda-forge 79 | requests 2.31.0 pypi_0 pypi 80 | setuptools 65.5.1 pyhd8ed1ab_0 conda-forge 81 | sqlite 3.40.0 h2229b38_0 conda-forge 82 | svt-av1 1.3.0 h7ea286d_0 conda-forge 83 | tk 8.6.12 he1e0b03_0 conda-forge 84 | urllib3 2.0.7 pypi_0 pypi 85 | wheel 0.38.4 pyhd8ed1ab_0 conda-forge 86 | x264 1!164.3095 h57fd34a_2 conda-forge 87 | x265 3.5 hbc6ce65_3 conda-forge 88 | xz 5.2.6 h57fd34a_0 conda-forge 89 | zlib 1.2.13 h03a7124_4 conda-forge 90 | zstd 1.5.2 h8128057_4 conda-forge 91 | --------------------------------------------------------------------------------