Traditional presentation methods often rely on physical devices like clickers, keyboards, or mouse controls, which can disrupt the flow of a presentation and limit interactivity. These methods can be especially cumbersome in virtual or online meetings, where presenters may struggle to manage slides, videos, and other content seamlessly.
The introduction of hand gesture control in this presentation system addresses these challenges by providing an intuitive, touchless way to control and navigate through presentations. Hand gestures enhance the natural flow of the presentation, allowing presenters to focus more on their content and audience rather than managing devices.
This innovation is particularly significant in the context of online meetings where touchless, gesture-based interaction creates a more engaging and dynamic experience for both presenters and viewers. It allows users to present with ease, whether in corporate environments, classroom settings, or any virtual setting, making it easier to deliver smooth, professional presentations.
The AI-Powered Presentation System is an advanced, fully web-based application designed to redefine how presentations are created, controlled, and managed. Built on the versatile Flask framework, the system integrates artificial intelligence with the powerful CVZone library to enable seamless interaction through hand gestures.
This project introduces a natural, intuitive way to control presentations without traditional devices such as clickers or keyboards. By recognizing specific hand gestures in real-time, users can perform actions like:
MediaPipe, developed by Google, is used primarily for real-time processing of multimedia data, including video, audio, and sensor data. Some key features of MediaPipe include:
The AI-powered presentation system utilizes a MySQL database to efficiently manage user data, presentation content, and actions. This ensures that the system remains highly functional and scalable while securely storing and retrieving data. The database handles all user-related and presentation-related actions, from logging in and managing profiles to uploading content.
user = "root" pin = "" host = "localhost" db_name = "Presnterx" # Configuring database URI app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{user}:{pin}@{host}/{db_name}" # Disable modification tracking app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) Migrate(app,db)
The AI-powered presentation system offers a robust, interactive, and efficient solution for managing and delivering presentations. It leverages advanced technologies like AI and hand gesture recognition,
providing users with an innovative way to create, customize, and control presentations.
1. User Registration and Login:
Users can securely register and log into the system.
Once registered, they can access all features, ensuring a personalized and secure environment for managing their presentations.
2. Creating and Uploading Presentations:
Users can create new presentations by adding presentation details and uploading their content (slides, videos, or images).
Uploaded content is securely stored in the MySQL database, ensuring accessibility and organization.
3. Customizable Presentation Settings:
Each presentation includes a set of customizable settings that are stored in the database and applied during the session to enhance interactivity and user experience. These settings include:
Hand Selection:
The user can define which hand (left or right) will be used for gesture control during the presentation. This flexibility ensures comfort and adaptability for all presenters.
Presenter Visibility:
The presenter’s live feed is displayed in a small, interactive frame overlayed on the main presentation slide. This feature fosters better interaction and engagement with the audience by maintaining the presenter’s presence throughout the session.
Color Preferences:
Users can customize the color themes used during the presentation, ensuring alignment with their branding or style preferences.
Presentation Mode:
Users can choose how to navigate slides based on their preferred interaction style:
Hand Movement: Navigate slides using full hand gestures.
Finger Gestures: Use precise finger movements for slide control.
4. Gesture-Based Control:
The system incorporates the CVZone library for real-time hand gesture recognition, enabling users to control presentations effortlessly. Key gesture controls include:
Slide navigation (next/previous).
Starting and ending the presentation session.
Managing embedded video playback.
The AI-powered presentation system showcases the magic of artificial intelligence and its role in driving digital transformation. By integrating advanced gesture recognition, this system revolutionizes traditional presentation methods, enabling seamless and intuitive control without relying on a mouse or keyboard. After setting up default preferences, users can harness the full potential of AI to interact with their presentations effortlessly.
Key AI-Driven Features
To ensure seamless operation and customization, the system begins by defining a set of default variables. These variables serve as the foundation for configuring the presentation environment and allow users to personalize their experience further. The default settings are stored in the MySQL database, enabling persistence and adaptability for all sessions.
#######################################detectors############################################################################# detector = HandDetector(staticMode=False,maxHands=1,modelComplexity=1,detectionCon=0.5, minTrackCon=0.5) face_detector = FaceDetector(minDetectionCon=0.5, modelSelection=0) ############################################################################################################################ # Initialize hand, face, and other detectors detector = HandDetector(staticMode=False, maxHands=1, modelComplexity=1, detectionCon=0.5, minTrackCon=0.5) face_detector = FaceDetector(minDetectionCon=0.5, modelSelection=0) from myproject import app
# Define a function to generate frames for streaming def generate_frames(id): global imageNumber, faceWhiteImageMode, handWiteImageMode, handType, y_axix, buttonPressed, buttonDelay, buttonCounter, presnterImageMode, presnterDelay, PresneterCounter, pointerColor, annotationsStart, annotationNumber, previous_x, presntionSlidingMode, gray_color, closeCamera, closeCameraCounter, closeCameraDelay, annotations, fingers with app.app_context(): #intiate db for context db presntaion = Presentaions.query.filter_by(id=id, deleted=1).first() if presntaion: presntaion_id = presntaion.id owner = presntaion.user_id images = PresntaionImages.query.filter_by(pres_author=presntaion, deleted=1).all() image_names = [image.image_name for image in images] folderPath = current_app.root_path + f'/static/pres_images/{owner}/{presntaion_id}/' presnetaionPath = sorted(os.listdir(folderPath), key=len) while True: success, frame = cap.read() if not success: break frame = cv2.flip(frame, 1) frame = cv2.resize(frame, (wCam, hCam)) currentImagePath = os.path.join(folderPath, presnetaionPath[imageNumber]) currentImage = cv2.imread(currentImagePath) cv2.line(frame, (0, y_axix), (wCam, y_axix), (0, 255, 0), 10) hands, _ = detector.findHands(frame, draw=True, flipType=True) if hands and buttonPressed is False: hand = hands[0] handList = hand['lmList'] cx, cy = hand['center'] indexFinger = hand['lmList'][8][0], hand['lmList'][8][1] if hand['type'] == 'Left': xVal = int(np.interp(handList[8][0], [wCam // 2, wCam - 200], [0, wCam])) yVal = int(np.interp(handList[8][1], [200, hCam - 200], [0, hCam])) indexFinger = xVal, yVal fingers = detector.fingersUp(hand) if cy <= y_axix: if previous_x is not None: if presntionSlidingMode == 0: if fingers == [0, 1, 1, 1, 1]: if cx - previous_x < -50: annotationsStart = False if imageNumber < len(presnetaionPath) - 1: buttonPressed = True annotations = [[]] annotationNumber = 0 imageNumber += 1 previous_x = None else: if fingers == [1, 0, 0, 0, 0]: annotationsStart = False if imageNumber > 0: buttonPressed = True annotations = [[]] annotationNumber = 0 imageNumber -= 1 if fingers == [0, 0, 0, 0, 1]: if imageNumber < len(presnetaionPath) - 1: buttonPressed = True annotations = [[]] annotationNumber = 0 imageNumber += 1 elif cy >= y_axix: if fingers == [0, 0, 0, 0, 0] and PresneterCounter == 0 and presnterImageMode is True: PresneterCounter = 1 if fingers == [1, 1, 1, 1, 1] and PresneterCounter == 0 and presnterImageMode is False: PresneterCounter = 1 if fingers == [0, 1, 1, 0, 0]: cv2.circle(currentImage, indexFinger, 10, pointerColor, cv2.FILLED) cv2.circle(currentImage, indexFinger, 50, gray_color, 30) if fingers == [0, 0, 1, 1, 1]: if annotations: if annotationNumber >= 0: annotations.pop(-1) annotationNumber -= 1 buttonPressed = True else: annotationsStart = False previous_x = None if PresneterCounter > 0 and presnterImageMode is True: PresneterCounter += 1 if fingers != [0, 0, 0, 0, 0]: PresneterCounter = 0 if PresneterCounter > presnterDelay: presnterImageMode = False PresneterCounter = 0 if closeCameraCounter > 0 and fingers == [0, 0, 0, 0, 0]: closeCameraCounter += 1 if closeCameraCounter > 15: cv2.circle(currentImage, (100, 100), 30, pointerColor, cv2.FILLED) cv2.putText(currentImage, str(closeCameraCounter - 1), (80, 110), cv2.FONT_HERSHEY_SIMPLEX, 1, gray_color, 2, cv2.FILLED) if closeCameraCounter > closeCameraDelay: cap.release() closeCameraCounter = 0 else: closeCamera = False closeCameraCounter = 0 if buttonPressed: buttonCounter += 1 if buttonCounter > buttonDelay: buttonCounter = 0 buttonPressed = False for i in range(len(annotations)): for j in range(len(annotations[i])): if j != 0: cv2.line(currentImage, annotations[i][j - 1], annotations[i][j], pointerColor, 10) if PresneterCounter > 0 and presnterImageMode is True: PresneterCounter += 1 if fingers != [0, 0, 0, 0, 0]: PresneterCounter = 0 if PresneterCounter > presnterDelay: presnterImageMode = False PresneterCounter = 0 ret, buffer = cv2.imencode('.jpg', currentImage) frame = buffer.tobytes() yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
The AI-powered presentation system represents a significant leap forward in how presentations are created, managed, and delivered. By combining the power of artificial intelligence, intuitive gesture control, and robust web-based technologies, the system eliminates the reliance on traditional tools like mice and keyboards, offering an innovative, hands-free experience.
Key highlights of the project include:
1-Seamless Interaction: Users can control their presentations with simple hand and finger gestures, making the process natural and engaging.
2-Personalization: Customizable settings allow presenters to tailor the experience to their specific needs, from hand preferences to color themes.
3-Enhanced Engagement: Features like presenter visibility and on-screen annotations foster better interaction with the audience.
4-Technological Integration: The use of the CVZone library for gesture recognition, combined with a MySQL database for data management, ensures reliability, scalability, and efficiency.
This system is designed to cater to a diverse range of users, including educators, business professionals, and general audiences, offering flexibility and adaptability for any online meeting or presentation setting. It embodies the transformative potential of digital innovation, simplifying presentation workflows while enhancing user experience.
By bridging the gap between advanced AI capabilities and user-friendly interfaces, this project demonstrates how technology can empower individuals to communicate more effectively and efficiently. It sets a new standard for interactive presentations, making them smarter, more accessible, and future-ready.
There are no datasets linked
There are no models linked
There are no models linked
There are no datasets linked