{"id":1398,"date":"2017-05-17T01:53:13","date_gmt":"2017-05-17T01:53:13","guid":{"rendered":"http:\/\/blogs.discovery.wisc.edu\/projects\/?p=1398"},"modified":"2017-05-17T01:53:29","modified_gmt":"2017-05-17T01:53:29","slug":"final-post-with-code-and-image","status":"publish","type":"post","link":"https:\/\/blogs.discovery.wisc.edu\/projects\/2017\/05\/17\/final-post-with-code-and-image\/","title":{"rendered":"Final Post with code and image"},"content":{"rendered":"<p>Here&#8217;s how the project turned out:<\/p>\n<p><a href=\"http:\/\/blogs.discovery.wisc.edu\/projects\/files\/2017\/05\/final-1.png\"><img loading=\"lazy\" class=\"alignnone size-medium wp-image-1399\" src=\"http:\/\/blogs.discovery.wisc.edu\/projects\/files\/2017\/05\/final-1-300x167.png\" alt=\"final\" width=\"300\" height=\"167\" srcset=\"https:\/\/blogs.discovery.wisc.edu\/projects\/files\/2017\/05\/final-1-300x167.png 300w, https:\/\/blogs.discovery.wisc.edu\/projects\/files\/2017\/05\/final-1-768x427.png 768w, https:\/\/blogs.discovery.wisc.edu\/projects\/files\/2017\/05\/final-1-1024x569.png 1024w, https:\/\/blogs.discovery.wisc.edu\/projects\/files\/2017\/05\/final-1-500x278.png 500w, https:\/\/blogs.discovery.wisc.edu\/projects\/files\/2017\/05\/final-1.png 1919w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>And the code for the project:<\/p>\n<pre>import cv2\r\nimport numpy as np\r\nimport argparse\r\n\r\nimport math\r\nfrom scipy.spatial import distance\r\n\r\n\r\n#ap = argparse.ArgumentParser()\r\n#ap.add_argument(\"-i\", \"--image\", required = True, help = \"Path to the image\")\r\n#args = vars(ap.parse_args())\r\n\r\n#img = cv2.imread(args[\"image\"])\r\nimg = cv2.imread(\"test.jpg\", 0)\r\nimg = cv2.medianBlur(img,5)\r\ncimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)\r\n\r\ncv2.namedWindow(\"Display\", flags= cv2.WINDOW_AUTOSIZE)\r\n\r\ncircles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,100,\r\n                           param1=50,param2=25,minRadius=10,maxRadius=30)\r\n\r\ncircles = np.uint16(np.around(circles))\r\n\r\n#coordinates of pupils\r\npoint1x = 0.0\r\npoint1y = 0.0\r\npoint2x = 0.0\r\npoint2y = 0.0\r\n\r\n#coordinates of object on forehead\r\nleftpointx = 0\r\nleftpointy = 0\r\nrightpointx = 0\r\nrightpointy = 0\r\n\r\n#coordinates of pupils in case hough circles doesn't work\r\nleftpointx2 = 0\r\nleftpointy2 = 0\r\nrightpointx2 = 0\r\nrightpointy2 = 0\r\n\r\nobjectexist = 0\r\n\r\nm = 0\r\nk = 0\r\n\r\ndist = 0 #distance of pupils in pixels\r\ndist2 = 0 #distance of object in pixels\r\n\r\nmm = 100 #distance of object in mm\r\n\r\n\r\n\r\nn = 1\r\n\r\n\r\nfor i in circles[0,:]:\r\n    # draw the outer circle\r\n\r\n    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)\r\n    # draw the center of the circle\r\n    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)\r\n    if n == 1:\r\n        n = 2\r\n        point1x = float(i[0])\r\n        point1y = float(i[1])\r\n    elif n==2 :\r\n        point2x = float(i[0])\r\n        point2y = float(i[1])\r\n\r\n    #print(\" \" + point1x + \", \" + point1y + \", \" + point2x + \", \" + point2y)\r\n\r\nprint(point1x)\r\nprint(point1y)\r\nprint(point2x)\r\nprint(point2y)\r\n\r\n\r\n\r\n\r\n\r\ndist = math.hypot(point2x - point1x, point2y - point1y) #ipd in pixels\r\n\r\n#if dist &lt; 10000:\r\nprint(dist)\r\n\r\n\r\n\r\ndef my_mouse_callback(event, x, y, flags, param):\r\n    global m\r\n    global k\r\n    global leftpointx\r\n    global leftpointy\r\n    global rightpointx\r\n    global rightpointy\r\n\r\n    global leftpointx2\r\n    global leftpointy2\r\n    global rightpointx2\r\n    global rightpointy2\r\n\r\n    global objectexist\r\n\r\n    global dist\r\n    global dist2\r\n    if event==cv2.EVENT_LBUTTONDBLCLK:\r\n        m = m+1\r\n\r\n        #print(x)\r\n        if m == 1:\r\n            leftpointx = x\r\n            leftpointy = y\r\n        elif m == 2:\r\n            rightpointx = x\r\n            rightpointy = y\r\n            dist2 = math.hypot(rightpointx - leftpointx, rightpointy - leftpointy)\r\n            print( \"object distance = \" + str(dist2))\r\n\r\n            if dist &lt; 10000:\r\n                distanceInMM = dist * (mm \/ dist2)  # ipd in mm\r\n                print( \"IPD in mm = \" + str(distanceInMM))\r\n    if dist &gt; 10000:\r\n        if event==cv2.EVENT_RBUTTONDBLCLK: #used if hough circles doesn't work\r\n            k = k+1\r\n            if dist2 == 0:\r\n                dist2 == 500\r\n\r\n            #print(x)\r\n            if k == 1:\r\n                leftpointx2 = x\r\n                leftpointy2 = y\r\n            elif k == 2:\r\n                rightpointx2 = x\r\n                rightpointy2 = y\r\n                dist = math.hypot(rightpointx2 - leftpointx2, rightpointy2 - leftpointy2)\r\n                print(\"IPD in pixels = \" + str(dist))\r\n\r\n                distanceInMM = dist * (mm \/ dist2)  # ipd in mm\r\n                print( \"IPD in mm = \" + str(distanceInMM))\r\n\r\ncv2.setMouseCallback(\"Display\",my_mouse_callback,cimg)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nwhile(1):\r\n    cv2.imshow(\"Display\",cimg)\r\n\r\n    if dist2 == 0 and dist &lt; 10000:\r\n        c = cv2.waitKey(0)\r\n        if c == 32: #spacebar\r\n            dist2 = 500\r\n            distanceInMM = dist * (mm \/ dist2)  # ipd in mm\r\n            print(\"IPD in mm = \" + str(distanceInMM))\r\n\r\n    if cv2.waitKey(15)%0x100==27:break    # waiting for clicking escape key\r\ncv2.destroyWindow(\"Display\")\r\n\r\n\r\n\r\n#cv2.imshow('detected circles',cimg)\r\n\r\n\r\n\r\n\r\n#cv2.waitKey(0)\r\n#cv2.destroyAllWindows()<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Here&#8217;s how the project turned out: And the code for the project: import cv2 import numpy as np import argparse import math from scipy.spatial import distance #ap = argparse.ArgumentParser() #ap.add_argument(&#8220;-i&#8221;, &#8220;&#8211;image&#8221;, required = True, help = &#8220;Path to the image&#8221;) &hellip; <a href=\"https:\/\/blogs.discovery.wisc.edu\/projects\/2017\/05\/17\/final-post-with-code-and-image\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":196,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[35,3],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/posts\/1398"}],"collection":[{"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/users\/196"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/comments?post=1398"}],"version-history":[{"count":1,"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/posts\/1398\/revisions"}],"predecessor-version":[{"id":1400,"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/posts\/1398\/revisions\/1400"}],"wp:attachment":[{"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/media?parent=1398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/categories?post=1398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.discovery.wisc.edu\/projects\/wp-json\/wp\/v2\/tags?post=1398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}