{"id":2271,"date":"2022-07-10T05:41:32","date_gmt":"2022-07-10T00:41:32","guid":{"rendered":"https:\/\/www.edopedia.com\/blog\/?p=2271"},"modified":"2022-07-10T07:28:56","modified_gmt":"2022-07-10T02:28:56","slug":"webcam-eye-blink-counter-using-python3-opencv-mediapipe","status":"publish","type":"post","link":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/","title":{"rendered":"Webcam Eye Blink Counter Using Python 3 OpenCV &#038; MediaPipe"},"content":{"rendered":"\n<p>In this tutorial, you will get the full source code of the webcam <strong>Eye Blink Counter<\/strong>. Basically, we will use Python 3, OpenCV &amp; MediaPipe to create this computer vision script. Our code will perform <strong>eye blink detection<\/strong> and then keep track of how many times the user blinks his eyes. This value is then printed inside a GUI Desktop App screen as &#8220;Total Blinks&#8221;.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">pip install opencv-python --user<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">pip install mediapipe --user<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">code.py<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">import cv2 as cv\nimport mediapipe as mp\nimport time\nimport math\nimport numpy as np\n# variables \nframe_counter =0\nCEF_COUNTER =0\nTOTAL_BLINKS =0\n# constants\nCLOSED_EYES_FRAME =3\nFONTS =cv.FONT_HERSHEY_COMPLEX\n\n# face bounder indices \nFACE_OVAL=[ 10, 338, 297, 332, 284, 251, 389, 356, 454, 323, 361, 288, 397, 365, 379, 378, 400, 377, 152, 148, 176, 149, 150, 136, 172, 58, 132, 93, 234, 127, 162, 21, 54, 103,67, 109]\n\n# lips indices for Landmarks\nLIPS=[ 61, 146, 91, 181, 84, 17, 314, 405, 321, 375,291, 308, 324, 318, 402, 317, 14, 87, 178, 88, 95,185, 40, 39, 37,0 ,267 ,269 ,270 ,409, 415, 310, 311, 312, 13, 82, 81, 42, 183, 78 ]\nLOWER_LIPS =[61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291, 308, 324, 318, 402, 317, 14, 87, 178, 88, 95]\nUPPER_LIPS=[ 185, 40, 39, 37,0 ,267 ,269 ,270 ,409, 415, 310, 311, 312, 13, 82, 81, 42, 183, 78] \n# Left eyes indices \nLEFT_EYE =[ 362, 382, 381, 380, 374, 373, 390, 249, 263, 466, 388, 387, 386, 385,384, 398 ]\nLEFT_EYEBROW =[ 336, 296, 334, 293, 300, 276, 283, 282, 295, 285 ]\n\n# right eyes indices\nRIGHT_EYE=[ 33, 7, 163, 144, 145, 153, 154, 155, 133, 173, 157, 158, 159, 160, 161 , 246 ]  \nRIGHT_EYEBROW=[ 70, 63, 105, 66, 107, 55, 65, 52, 53, 46 ]\n\nmap_face_mesh = mp.solutions.face_mesh\n# camera object \ncamera = cv.VideoCapture(0)\n\n# colors \n# values =(blue, green, red) opencv accepts BGR values not RGB\nYELLOW =(0,255,255)\nGREEN = (0,255,0)\nPINK = (147,20,255)\n\ndef colorBackgroundText(img, text, font, fontScale, textPos, textThickness=1,textColor=(0,255,0), bgColor=(0,0,0), pad_x=3, pad_y=3):\n    &quot;&quot;&quot;\n    Draws text with background, with  control transparency\n    @param img:(mat) which you want to draw text\n    @param text: (string) text you want draw\n    @param font: fonts face, like FONT_HERSHEY_COMPLEX, FONT_HERSHEY_PLAIN etc.\n    @param fontScale: (double) the size of text, how big it should be.\n    @param textPos: tuple(x,y) position where you want to draw text\n    @param textThickness:(int) fonts weight, how bold it should be\n    @param textPos: tuple(x,y) position where you want to draw text\n    @param textThickness:(int) fonts weight, how bold it should be.\n    @param textColor: tuple(BGR), values --&gt;0 to 255 each\n    @param bgColor: tuple(BGR), values --&gt;0 to 255 each\n    @param pad_x: int(pixels)  padding of in x direction\n    @param pad_y: int(pixels) 1 to 1.0 (), controls transparency of  text background \n    @return: img(mat) with draw with background\n    &quot;&quot;&quot;\n    (t_w, t_h), _= cv.getTextSize(text, font, fontScale, textThickness) # getting the text size\n    x, y = textPos\n    cv.rectangle(img, (x-pad_x, y+ pad_y), (x+t_w+pad_x, y-t_h-pad_y), bgColor,-1) # draw rectangle \n    cv.putText(img,text, textPos,font, fontScale, textColor,textThickness ) # draw in text\n\n    return img\n\ndef textWithBackground(img, text, font, fontScale, textPos, textThickness=1,textColor=(0,255,0), bgColor=(0,0,0), pad_x=3, pad_y=3, bgOpacity=0.5):\n    &quot;&quot;&quot;\n    Draws text with background, with  control transparency\n    @param img:(mat) which you want to draw text\n    @param text: (string) text you want draw\n    @param font: fonts face, like FONT_HERSHEY_COMPLEX, FONT_HERSHEY_PLAIN etc.\n    @param fontScale: (double) the size of text, how big it should be.\n    @param textPos: tuple(x,y) position where you want to draw text\n    @param textThickness:(int) fonts weight, how bold it should be\n    @param textPos: tuple(x,y) position where you want to draw text\n    @param textThickness:(int) fonts weight, how bold it should be.\n    @param textColor: tuple(BGR), values --&gt;0 to 255 each\n    @param bgColor: tuple(BGR), values --&gt;0 to 255 each\n    @param pad_x: int(pixels)  padding of in x direction\n    @param pad_y: int(pixels) 1 to 1.0 (), controls transparency of  text background \n    @return: img(mat) with draw with background\n    &quot;&quot;&quot;\n    (t_w, t_h), _= cv.getTextSize(text, font, fontScale, textThickness) # getting the text size\n    x, y = textPos\n    overlay = img.copy() # coping the image\n    cv.rectangle(overlay, (x-pad_x, y+ pad_y), (x+t_w+pad_x, y-t_h-pad_y), bgColor,-1) # draw rectangle \n    new_img = cv.addWeighted(overlay, bgOpacity, img, 1 - bgOpacity, 0) # overlaying the rectangle on the image.\n    cv.putText(new_img,text, textPos,font, fontScale, textColor,textThickness ) # draw in text\n    img = new_img\n\n    return img\n\n# landmark detection function \ndef landmarksDetection(img, results, draw=False):\n    img_height, img_width= img.shape[:2]\n    # list[(x,y), (x,y)....]\n    mesh_coord = [(int(point.x * img_width), int(point.y * img_height)) for point in results.multi_face_landmarks[0].landmark]\n    if draw :\n        [cv.circle(img, p, 2, (0,255,0), -1) for p in mesh_coord]\n\n    # returning the list of tuples for each landmarks \n    return mesh_coord\n\n# Euclaidean distance \ndef euclaideanDistance(point, point1):\n    x, y = point\n    x1, y1 = point1\n    distance = math.sqrt((x1 - x)**2 + (y1 - y)**2)\n    return distance\n\n# Blinking Ratio\ndef blinkRatio(img, landmarks, right_indices, left_indices):\n    # Right eyes \n    # horizontal line \n    rh_right = landmarks[right_indices[0]]\n    rh_left = landmarks[right_indices[8]]\n    # vertical line \n    rv_top = landmarks[right_indices[12]]\n    rv_bottom = landmarks[right_indices[4]]\n\n    # LEFT_EYE \n    # horizontal line \n    lh_right = landmarks[left_indices[0]]\n    lh_left = landmarks[left_indices[8]]\n\n    # vertical line \n    lv_top = landmarks[left_indices[12]]\n    lv_bottom = landmarks[left_indices[4]]\n\n    rhDistance = euclaideanDistance(rh_right, rh_left)\n    rvDistance = euclaideanDistance(rv_top, rv_bottom)\n\n    lvDistance = euclaideanDistance(lv_top, lv_bottom)\n    lhDistance = euclaideanDistance(lh_right, lh_left)\n\n    reRatio = rhDistance\/rvDistance\n    leRatio = lhDistance\/lvDistance\n\n    ratio = (reRatio+leRatio)\/2\n    return ratio \n\n\n\nwith map_face_mesh.FaceMesh(min_detection_confidence =0.5, min_tracking_confidence=0.5) as face_mesh:\n\n    # starting time here \n    start_time = time.time()\n    # starting Video loop here.\n    while True:\n        frame_counter +=1 # frame counter\n        ret, frame = camera.read() # getting frame from camera \n        if not ret: \n            break # no more frames break\n        #  resizing frame\n        \n        frame = cv.resize(frame, None, fx=1.5, fy=1.5, interpolation=cv.INTER_CUBIC)\n        frame_height, frame_width= frame.shape[:2]\n        rgb_frame = cv.cvtColor(frame, cv.COLOR_RGB2BGR)\n        results  = face_mesh.process(rgb_frame)\n        if results.multi_face_landmarks:\n            mesh_coords = landmarksDetection(frame, results, False)\n            ratio = blinkRatio(frame, mesh_coords, RIGHT_EYE, LEFT_EYE)\n            colorBackgroundText(frame,  f'Ratio : {round(ratio,2)}', FONTS, 0.7, (30,100),2, PINK, YELLOW)\n\n            if ratio &gt;3.6:\n                CEF_COUNTER +=1\n                colorBackgroundText(frame,  f'Blink', FONTS, 1.7, (int(frame_height\/2), 100), 2, YELLOW, pad_x=6, pad_y=6, )\n            else:\n                if CEF_COUNTER&gt;CLOSED_EYES_FRAME:\n                    TOTAL_BLINKS +=1\n                    CEF_COUNTER =0\n                    \n            colorBackgroundText(frame,  f'Total Blinks: {TOTAL_BLINKS}', FONTS, 0.7, (30,150),2)\n            \n            cv.polylines(frame,  [np.array([mesh_coords[p] for p in LEFT_EYE ], dtype=np.int32)], True, GREEN, 1, cv.LINE_AA)\n            cv.polylines(frame,  [np.array([mesh_coords[p] for p in RIGHT_EYE ], dtype=np.int32)], True, GREEN, 1, cv.LINE_AA)\n\n        # calculating  frame per seconds FPS\n        end_time = time.time()-start_time\n        fps = frame_counter\/end_time\n\n        frame =textWithBackground(frame,f'FPS: {round(fps,1)}',FONTS, 1.0, (30, 50), bgOpacity=0.9, textThickness=2)\n        # writing image for thumbnail drawing shape\n        cv.imshow('Eye Blink Counter by www.edopedia.com', frame)\n        key = cv.waitKey(2)\n        if key==ord('q') or key ==ord('Q'):\n            break\n    cv.destroyAllWindows()\n    camera.release()\n<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, you will get the full source code of the webcam Eye Blink Counter. Basically, we will use Python 3, OpenCV &amp; MediaPipe to create this computer vision script. Our code will perform eye blink detection and then keep track of how many times the user blinks his eyes. This value is then &#8230; <a title=\"Webcam Eye Blink Counter Using Python 3 OpenCV &#038; MediaPipe\" class=\"read-more\" href=\"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/\" aria-label=\"Read more about Webcam Eye Blink Counter Using Python 3 OpenCV &#038; MediaPipe\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":2273,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[112],"tags":[],"class_list":["post-2271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Webcam Eye Blink Counter Using Python 3 OpenCV &amp; MediaPipe<\/title>\n<meta name=\"description\" content=\"In this tutorial, you will get the full source code of the webcam Eye Blink Counter. Basically, we will use Python 3, OpenCV &amp; MediaPipe to create\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Webcam Eye Blink Counter Using Python 3 OpenCV &amp; MediaPipe\" \/>\n<meta property=\"og:description\" content=\"In this tutorial, you will get the full source code of the webcam Eye Blink Counter. Basically, we will use Python 3, OpenCV &amp; MediaPipe to create\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/\" \/>\n<meta property=\"og:site_name\" content=\"Edopedia\" \/>\n<meta property=\"article:author\" content=\"trulyfurqan\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-10T00:41:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-10T02:28:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/07\/eye_blink_counter_python.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"880\" \/>\n\t<meta property=\"og:image:height\" content=\"495\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Furqan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Furqan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Webcam Eye Blink Counter Using Python 3 OpenCV & MediaPipe","description":"In this tutorial, you will get the full source code of the webcam Eye Blink Counter. Basically, we will use Python 3, OpenCV &amp; MediaPipe to create","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/","og_locale":"en_US","og_type":"article","og_title":"Webcam Eye Blink Counter Using Python 3 OpenCV & MediaPipe","og_description":"In this tutorial, you will get the full source code of the webcam Eye Blink Counter. Basically, we will use Python 3, OpenCV &amp; MediaPipe to create","og_url":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/","og_site_name":"Edopedia","article_author":"trulyfurqan","article_published_time":"2022-07-10T00:41:32+00:00","article_modified_time":"2022-07-10T02:28:56+00:00","og_image":[{"width":880,"height":495,"url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/07\/eye_blink_counter_python.jpg","type":"image\/jpeg"}],"author":"Furqan","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Furqan","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/#article","isPartOf":{"@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/"},"author":{"name":"Furqan","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/person\/3951cb19e3aa56df09e408c98aa02339"},"headline":"Webcam Eye Blink Counter Using Python 3 OpenCV &#038; MediaPipe","datePublished":"2022-07-10T00:41:32+00:00","dateModified":"2022-07-10T02:28:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/"},"wordCount":74,"commentCount":0,"publisher":{"@id":"https:\/\/www.edopedia.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/#primaryimage"},"thumbnailUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/07\/eye_blink_counter_python.jpg","articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/","url":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/","name":"Webcam Eye Blink Counter Using Python 3 OpenCV & MediaPipe","isPartOf":{"@id":"https:\/\/www.edopedia.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/#primaryimage"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/#primaryimage"},"thumbnailUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/07\/eye_blink_counter_python.jpg","datePublished":"2022-07-10T00:41:32+00:00","dateModified":"2022-07-10T02:28:56+00:00","description":"In this tutorial, you will get the full source code of the webcam Eye Blink Counter. Basically, we will use Python 3, OpenCV &amp; MediaPipe to create","breadcrumb":{"@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/#primaryimage","url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/07\/eye_blink_counter_python.jpg","contentUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/07\/eye_blink_counter_python.jpg","width":880,"height":495,"caption":"Webcam Eye Blink Counter Using Python 3 OpenCV & MediaPipe"},{"@type":"BreadcrumbList","@id":"https:\/\/www.edopedia.com\/blog\/webcam-eye-blink-counter-using-python3-opencv-mediapipe\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.edopedia.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Webcam Eye Blink Counter Using Python 3 OpenCV &#038; MediaPipe"}]},{"@type":"WebSite","@id":"https:\/\/www.edopedia.com\/blog\/#website","url":"https:\/\/www.edopedia.com\/blog\/","name":"Edopedia","description":"Coding\/Programming Blog","publisher":{"@id":"https:\/\/www.edopedia.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.edopedia.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.edopedia.com\/blog\/#organization","name":"Edopedia","url":"https:\/\/www.edopedia.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2017\/10\/edopedia_icon_text_10.jpg","contentUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2017\/10\/edopedia_icon_text_10.jpg","width":400,"height":100,"caption":"Edopedia"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/person\/3951cb19e3aa56df09e408c98aa02339","name":"Furqan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e5e68aef3ad8f0b83d56f4953c512c8e57bd2e6dc64daec33b5d0495d9058f51?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e5e68aef3ad8f0b83d56f4953c512c8e57bd2e6dc64daec33b5d0495d9058f51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e5e68aef3ad8f0b83d56f4953c512c8e57bd2e6dc64daec33b5d0495d9058f51?s=96&d=mm&r=g","caption":"Furqan"},"description":"Well. I've been working for the past three years as a web designer and developer. I have successfully created websites for small to medium sized companies as part of my freelance career. During that time I've also completed my bachelor's in Information Technology.","sameAs":["http:\/\/www.edopedia.com\/blog\/","trulyfurqan"],"url":"https:\/\/www.edopedia.com\/blog\/author\/furqan\/"}]}},"_links":{"self":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts\/2271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/comments?post=2271"}],"version-history":[{"count":0,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts\/2271\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/media\/2273"}],"wp:attachment":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/media?parent=2271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/categories?post=2271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/tags?post=2271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}