File size: 2,476 Bytes
3a7370e
 
 
 
 
 
b171c43
3a7370e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b171c43
 
3a7370e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b171c43
 
3a7370e
 
 
 
 
 
b171c43
3a7370e
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import tensorflow as tf
import numpy as np
import streamlit as st
import cv2
import av
import mediapipe as mp
from streamlit_webrtc import webrtc_streamer, VideoTransformerBase, RTCConfiguration, VideoProcessorBase, WebRtcMode


# Initializing the Model
mpHands = mp.solutions.hands
hands = mpHands.Hands()

# Initializing the drawing utils for drawing the landmarks on image
mpDraw = mp.solutions.drawing_utils
mpDrawingStyle = mp.solutions.drawing_styles

# Load the Trained model of Sign Language
model = tf.keras.models.load_model('ASLmodelF.h5')

RTC_CONFIGURATION = RTCConfiguration({"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]})
ASLimg = cv2.imread('ASLimg.JPG')


label = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
         'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

# cap = cv2.VideoCapture(0)
class signDetection(VideoTransformerBase):
    def transfrom(self, frame):
        img = frame.to_ndarray(format="bgr24")
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        lmsList = []
        result = hands.process(imgRGB)
        if result.multi_hand_landmarks:
            handLms = result.multi_hand_landmarks[0]
            for lm in handLms.landmark:
                h, w, c = img.shape
                lmsList.append(lm.x)
                lmsList.append(lm.y)
            mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS, mpDrawingStyle.get_default_hand_landmarks_style(),
                                  mpDrawingStyle.get_default_hand_connections_style())
            lmsList = [lmsList]
            lmsList = np.array(lmsList)
            r = model.predict(lmsList)
            r = np.argmax(r)
            cv2.putText(img, f'Result = {label[r]}', (50, 40), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 0, 255), 2)
        # return av.VideoFrame.from_ndarray(img, format='bgr24')
        return img

def main():
    st.title('Real Time Sign Language Detection')

    st.header('Webcam Live Feed')
    st.write("Click on start to use webcam and detect finger spellings")
    webrtc_streamer(key='key', mode=WebRtcMode.SENDRECV, rtc_configuration=RTC_CONFIGURATION, video_processor_factory=signDetection)

    with st.sidebar:
        st.header('Finger Spellings')
        st.image(image=ASLimg)
        st.markdown('**Created by:** Manish Kumar')
        st.markdown('Github Link: [ASL-Recognition](https://github.com/ManishKumar219/ASL-Recognition)')

if __name__ == "__main__":
    main()