Zero_to_Hero_Machine_Learning / pages /How to handle Videos.py
shwetashweta05's picture
Update pages/How to handle Videos.py
960f68e verified
raw
history blame
11.1 kB
import streamlit as st
import pandas as pd
st.subheader(":red[**Video Capture -**]")
st.write("Video capture is the process of accessing and reading video streams (e.g., from a camera or a video file) in a program. Here's a step-by-step explanation of how video capture works, primarily using OpenCV, a popular library for computer vision tasks in Python.")
st.write("**Import Necessary Libraries**")
st.write("To handle video capture, you need a library like OpenCV. Begin by importing it:")
code="""
import numpy as np
import cv2
"""
st.code(code,language="python")
st.write(":blue[**1. Initialize the Video Capture**]")
code="""
vid = cv2.VideoCapture(0) # Use path for a video file or 0 for the default webcam
"""
st.code(code,language="python")
st.write("""
- **cv2.VideoCapture(0):**
- 0 refers to the default webcam of the system.
- You can replace 0 with 1, 2, etc., for other cameras.
- If you're capturing from a file, provide the file path as a string (e.g., 'video.mp4').
""")
st.write(":blue[**2. Start an Infinite Loop for Frame Capture**]")
code="""
while True: # This loop keeps running, continuously reading frames from the video source (webcam).
"""
st.code(code,language="python")
st.write(":blue[**3. Read Frames**]")
code="""
succ, img = vid.read()
"""
st.code(code,language="python")
st.write("""
- vid.read
- Returns two values:
1.succ: A boolean that is True if the frame is read successfully, False otherwise.
2.img: The captured frame, represented as a NumPy array.
""")
st.write(":blue[**4. Handle Errors**]")
code="""
if succ == False:
print("camera not working")
break
"""
st.code(code,language="python")
st.write("""
- If succ is False, it indicates the camera isn't working or the video stream cannot be accessed.
- The loop exits if the camera isn't functioning.
""")
st.write(":blue[**5. Display the Frame**]")
code="""
cv2.imshow("live stream", img)
"""
st.code(code,language="python")
st.write("""
- cv2.imshow():
- Displays the captured frame (img) in a window titled "live stream."
- The frame is updated in real time.
""")
st.write(":blue[**6. Exit on Key Press**]")
code="""
if cv2.waitKey(1) & 255 == ord("w"):
break
"""
st.code(code,language="python")
st.write("""
- **cv2.waitKey(1):**
- Waits for 1 millisecond for a key press.
- The & 255 ensures compatibility with certain systems where cv2.waitKey can return larger values.
- **ord("w"):**
- Detects if the w key is pressed.
- If pressed, the loop breaks, stopping the video stream.
""")
st.write(":blue[**7. Clean Up Resources**]")
code="""
cv2.destroyAllWindows() #Closes all OpenCV windows that were opened using cv2.imshow().
"""
st.code(code,language="python")
st.write(":blue[**Complete Code with Comments**]")
st.write(":blue[**1.code**]")
code="""
import cv2
# Initialize video capture (0 for default webcam)
vid = cv2.VideoCapture(0)
while True:
# Capture a frame
succ, img = vid.read()
# Check if the frame was successfully read
if not succ:
print("Camera not working")
break
# Display the frame in a window
cv2.imshow("Live Stream", img)
# Exit the loop if the 'w' key is pressed
if cv2.waitKey(1) & 255 == ord("w"):
break
# Release the camera and close all OpenCV windows
vid.release()
cv2.destroyAllWindows()
"""
st.code(code,language="python")
st.write(":blue[**Enhancements**]")
st.write("**1.Add Frame Processing: Apply transformations like grayscale, edge detection, or resizing before displaying.**")
code="""
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Grayscale Live Stream", gray_img)
"""
st.code(code,language="python")
st.write("**2.Save Frames: Capture and save an image when a specific key (e.g., s) is pressed.**")
code="""
if cv2.waitKey(1) & 255 == ord("s"):
cv2.imwrite("captured_image.jpg", img)
"""
st.code(code,language="python")
st.write("**3.Handle Multiple Cameras: Use different indices for cv2.VideoCapture() to access other webcams if available.**")
st.write("**4.Real-Time FPS Display: Measure and display the frames per second (FPS) on the live stream.**")
st.write(":blue[**2.code**]")
code="""
import cv2
import numpy as np
# Initialize the video capture (0 for default webcam)
vid = cv2.VideoCapture(0)
while True:
# Capture frame
succ, img = vid.read()
if not succ:
print("Camera not working")
break
# Split the channels
b, g, r = cv2.split(img)
# Create a black canvas for channel visualization
z = np.zeros(b.shape, dtype=np.uint8)
# Display the original and individual color channels
cv2.imshow("live stream1", img) # Original video frame
cv2.imshow("live stream2", cv2.merge([b, z, z])) # Blue channel
cv2.imshow("live stream3", cv2.merge([z, g, z])) # Green channel
cv2.imshow("live stream4", cv2.merge([z, z, r])) # Red channel
# Exit when 'w' is pressed
if cv2.waitKey(1) & 255 == ord("w"):
break
# Release resources and close windows
vid.release()
cv2.destroyAllWindows()
"""
st.code(code,language="python")
st.write(":blue[**Code Explanation**]")
st.write("**1. Video Capture Initialization**")
code="""
vid = cv2.VideoCapture(0) # Access the default webcam (ID = 0)
"""
st.code(code,language="python")
st.write("""
- cv2.VideoCapture(0) initializes the video capture object using the system's default webcam.
- Replace 0 with a file path (e.g., 'video.mp4') to process a saved video.
""")
st.write("**2. Read Frames in a Loop**")
code="""
while True:
succ, img = vid.read()
if succ == False:
print("camera not working")
break
"""
st.code(code,language="python")
st.write("""
- The loop runs continuously, capturing video frames in real-time.
- succ: A boolean indicating whether a frame was captured successfully.
- img: The captured frame as a NumPy array.
If the camera isn't working or a frame cannot be captured, the loop exits.
""")
st.write("**3. Split Channels**")
code="""
b, g, r = cv2.split(img)
"""
st.code(code,language="python")
st.write("""
- cv2.split(img) decomposes the frame into its three color channels:
- b: Blue channel.
- g: Green channel.
- r: Red channel.
""")
st.write("**4. Create a Black Canvas for Channel Visualization**")
code="""
z = np.zeros(b.shape, dtype=np.uint8)
"""
st.code(code,language="python")
st.write("""
- np.zeros(b.shape, dtype=np.uint8) creates a black canvas of the same size as the frame's blue channel.
- This black canvas is used to replace other color channels when displaying a single channel.
""")
st.write("**5. Display Original and Channel-Specific Streams**")
code="""
cv2.imshow("live stream1", img) # Original video frame
cv2.imshow("live stream2", cv2.merge([b, z, z])) # Blue channel
cv2.imshow("live stream3", cv2.merge([z, g, z])) # Green channel
cv2.imshow("live stream4", cv2.merge([z, z, r])) # Red channel
"""
st.code(code,language="python")
st.write("""
1.cv2.imshow() displays the frames in separate windows:
- live stream1: The original frame.
- live stream2: The blue channel, visualized by merging it with two black channels.
- live stream3: The green channel, visualized similarly.
- live stream4: The red channel.
2.cv2.merge([channel1, channel2, channel3]) combines the individual channels to create a 3-channel image.
""")
st.write("**6. Exit on Key Press**")
code="""
if cv2.waitKey(1) & 255 == ord("w"):
break
"""
st.code(code,language="python")
st.write("""
- Waits for 1 millisecond to check if the w key is pressed.
- If w is detected, the loop breaks, stopping the video feed.
""")
st.write("**7. Clean Up Resources**")
code="""
import cv2
import os
# Create a directory to save images
os.makedirs("/home/user/han_sign", exist_ok=True)
# Initialize video capture
vid = cv2.VideoCapture(0)
# Initialize counter for image filenames
c = 0
try:
while True:
# Capture a frame
suc, img = vid.read()
if not suc:
print("Camera not working")
break
# Display the live stream
cv2.putText(img, "Press 's' to save, 'c' to exit", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow("Live Stream", img)
# Save the image when 's' key is pressed
if cv2.waitKey(1) & 255 == ord("s"):
cv2.imwrite(f"/home/user/han_sign/{c}.jpg", img)
print(f"Image {c} has been captured")
c += 1
# Exit when 'c' key is pressed
if cv2.waitKey(1) & 255 == ord("c"):
break
finally:
# Release resources and close windows
vid.release()
cv2.destroyAllWindows()
print(f"Total images captured: {c}")
"""
st.code(code,language="python")
st.write("**Code Explanation**")
st.write(":blue[**1. Create a Directory**]")
code="""
import os
os.makedirs("/home/user/han_sign)
"""
st.code(code,language="python")
st.write("""
- os.makedirs(path):
- Creates a directory at the specified path.
- In this case, a folder named han_sign is created in the Downloads directory.
""")
st.write(":blue[**2. Initialize Video Capture**]")
code="""
vid = cv2.VideoCapture(0)
"""
st.code(code,language="python")
st.write("""
- Initializes video capture using the default webcam (index 0).
- Replace 0 with a file path to use a video file instead.
""")
st.write(":blue[**3. Initialize Counter**]")
code="""
c = 0 #This counter is used to assign unique filenames to the captured images (e.g., 0.jpg, 1.jpg, ...).
"""
st.code(code,language="python")
st.write(":blue[**4. Start an Infinite Loop for Video Capture**]")
code="""
while True:
suc, img = vid.read()
if suc == False:
print("camera not working")
break
"""
st.code(code,language="python")
st.write("""
- Captures frames from the video stream in real time.
- suc is True if the frame is successfully captured.
- If suc is False, the loop exits, indicating a problem with the camera.
""")
st.write(":blue[**5. Save Images on Key Press**]")
code="""
if cv2.waitKey(1) & 255 == ord("s"):
cv2.imwrite("/home/user/han_sign"/{}.jpg".format(c), img)
print("image have been captured")
c += 1
"""
st.code(code,language="python")
st.write("""
- cv2.waitKey(1) & 255 == ord("s"):
- Detects if the s key is pressed.
- cv2.imwrite(path, img):
- Saves the current frame (img) as a .jpg file in the specified folder.
- The filename is determined by the counter c.
-c += 1:
Increments the counter to ensure the next image has a unique filename.
""")
st.write(":blue[**6. Exit on Key Press**]")
code="""
if cv2.waitKey(1) & 255 == ord("c"): #Detects if the c key is pressed, which exits the loop and stops the program.
break
"""
st.code(code,language="python")
st.write(":blue[**7. Release Resources**]")
code="""
cv2.destroyAllWindows() #Closes all OpenCV windows and releases resources.
"""
st.code(code,language="python")