{"id":708,"date":"2009-11-26T17:31:17","date_gmt":"2009-11-27T01:31:17","guid":{"rendered":"https:\/\/mathpirate.net\/log\/?p=708"},"modified":"2009-11-26T17:31:17","modified_gmt":"2009-11-27T01:31:17","slug":"boldly-going","status":"publish","type":"post","link":"https:\/\/mathpirate.net\/log\/2009\/11\/26\/boldly-going\/","title":{"rendered":"Boldly Going&#8230;"},"content":{"rendered":"<p>As I said in the beginning, detecting the faces is only part of the equation.\u00c2\u00a0 Just knowing that something in a face isn&#8217;t all that useful for me.\u00c2\u00a0 I need to know whose face it is.\u00c2\u00a0 In order to write that part of the code, I&#8217;m going to need a whole bunch of faces to use as training data.\u00c2\u00a0 For this to be useful, I&#8217;m going to need a large number of views of the same person, as well as sets for different people.\u00c2\u00a0 You can&#8217;t rightly have something you call &#8220;facial recognition&#8221; if all it can do is recognize your own face.\u00c2\u00a0 So, that means that the webcam is ruled out for this phase.\u00c2\u00a0 There&#8217;s only so many faces I have around my apartment, and it just won&#8217;t do.<\/p>\n<p>There are, of course, other options.\u00c2\u00a0 I could try to raid someplace like Flickr and steal someone&#8217;s family photos, or scour gossip sites for celebrity images.\u00c2\u00a0 However, what I have in mind is much easier and, as you&#8217;ll see, has a practical benefit, as well.<\/p>\n<p>Now,\u00c2\u00a0I just wrote a face detector.\u00c2\u00a0 It&#8217;s able to detect faces in video streams. So, why not put it to work on a video stream, detecting faces for me to use as my training set?\u00c2\u00a0 I&#8217;ll only\u00c2\u00a0get faces that I know the system can detect and they&#8217;ll already be cropped to the location of the face for me.<\/p>\n<p><a href=\"https:\/\/mathpirate.net\/log\/wp-content\/uploads\/2009\/11\/STTNGFaceDetection.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-709\" title=\"STTNGFaceDetection\" src=\"https:\/\/mathpirate.net\/log\/wp-content\/uploads\/2009\/11\/STTNGFaceDetection-300x187.png\" alt=\"STTNGFaceDetection\" width=\"300\" height=\"187\" srcset=\"https:\/\/mathpirate.net\/log\/wp-content\/uploads\/2009\/11\/STTNGFaceDetection-300x187.png 300w, https:\/\/mathpirate.net\/log\/wp-content\/uploads\/2009\/11\/STTNGFaceDetection-1024x640.png 1024w, https:\/\/mathpirate.net\/log\/wp-content\/uploads\/2009\/11\/STTNGFaceDetection.png 1440w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Obviously, the best source material to use is an episode of Star Trek: The Next Generation.\u00c2\u00a0 This has two main benefits.<\/p>\n<p>First, once I get all the faces detected and classified and the recognizer written, I&#8217;ll be able to run it against a different episode of TNG as a test.\u00c2\u00a0 Many of the people will be the same between episodes, so it should be able to recognize them, but the system should not recognize members of the supporting cast and guest stars, since they&#8217;re not in the source episode.\u00c2\u00a0 This is important, because I need to make sure it handles people it doesn&#8217;t know about correctly.<\/p>\n<p>The second and far more important benefit is that if I am successful, I will have written a program that is able to watch an episode of Star Trek: The Next Generation and let me know if Wesley Crusher is in it, so that I can skip those scenes.\u00c2\u00a0 That sort of technology has money-making potential.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As I said in the beginning, detecting the faces is only part of the equation.\u00c2\u00a0 Just knowing that something in a face isn&#8217;t all that useful for me.\u00c2\u00a0 I need to know whose face it is.\u00c2\u00a0 In order to write that part of the code, I&#8217;m going to need a whole bunch of faces to [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[84],"tags":[15,86,19],"_links":{"self":[{"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/posts\/708"}],"collection":[{"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/comments?post=708"}],"version-history":[{"count":2,"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/posts\/708\/revisions"}],"predecessor-version":[{"id":711,"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/posts\/708\/revisions\/711"}],"wp:attachment":[{"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/media?parent=708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/categories?post=708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mathpirate.net\/log\/wp-json\/wp\/v2\/tags?post=708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}