<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://elinux.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://elinux.org/api.php?action=feedcontributions&amp;user=Mayhewsw&amp;feedformat=atom</id>
		<title>eLinux.org - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://elinux.org/api.php?action=feedcontributions&amp;user=Mayhewsw&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/Special:Contributions/Mayhewsw"/>
		<updated>2013-06-18T06:52:16Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.22alpha</generator>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T03:29:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv, and espeak&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install espeak &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
Finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. Espeak integration.&lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew || Tweaking and customization of image recognition code. Software integration with hardware.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To be finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Better image classification || Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|-&lt;br /&gt;
| Faster camera refresh rates || Sam, Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV. It was not at all difficult to install and run. While it is noticeably slower than on larger machines, it is not prohibitively so. &lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks To ===&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T03:28:53Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
Finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew || Tweaking and customization of image recognition code. Software integration with hardware.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To be finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Better image classification || Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|-&lt;br /&gt;
| Faster camera refresh rates || Sam, Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV. It was not at all difficult to install and run. While it is noticeably slower than on larger machines, it is not prohibitively so. &lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks To ===&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:56:51Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
Finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew || Tweaking and customization of image recognition code. Software integration with hardware.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To be finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Better image classification || Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|-&lt;br /&gt;
| Espeak integration  || Sam - if it gets done, it will be done during 10th week&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV. It was not at all difficult to install and run. While it is noticeably slower than on larger machines, it is not prohibitively so. &lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks To ===&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:56:26Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
Finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew || Tweaking and customization of image recognition code. Software integration with hardware.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To be finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Better image classification || Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|-&lt;br /&gt;
| Espeak integration  || Sam - if it gets done, it will be done during 10th week&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV. It was not at all difficult to install and run. While it is noticeably slower than on larger machines, it is not prohibitively so. &lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks ===&lt;br /&gt;
Thanks to&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:54:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
Finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To be finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Better image classification || Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|-&lt;br /&gt;
| Espeak integration  || Sam - if it gets done, it will be done during 10th week&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV. It was not at all difficult to install and run. While it is noticeably slower than on larger machines, it is not prohibitively so. &lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks ===&lt;br /&gt;
Thanks to&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:53:48Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
Finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To be finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Better image classification || Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|-&lt;br /&gt;
| Espeak integration  || Sam - if it gets done, it will be done during 10th week&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV. It was not at all difficult to install and run. While it is noticeably slower than on larger machines, it is not prohibitively so. &lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks ===&lt;br /&gt;
Thanks to&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:53:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
Finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To be finished:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Better image classification || Stephen - if it gets done, it will be done during 10th week&lt;br /&gt;
|-&lt;br /&gt;
| Espeak integration  || Sam - if it gets done, it will be done during 10th week&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV. It was not at all difficult to install and run. While it is noticeably slower than on larger machines, it is not prohibitively so. &lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks ===&lt;br /&gt;
Thanks to&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:43:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV. It was not at all difficult to install and run. While it is noticeably slower than on larger machines, it is not prohibitively so. &lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks ===&lt;br /&gt;
Thanks to&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:38:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
We were pleased with how well the Beagleboard runs OpenCV.&lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
=== Thanks ===&lt;br /&gt;
Thanks to&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:37:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
Another facet of the original idea was to have the computer actually playing against humans. This would involve the computer accepting input when a human found a set. Since the computer turned out to be so bad at actually playing the game, it was never worth putting this sort of functionality into it. If the recognition ever becomes reliable, this would be interesting to implement.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
Thanks to:&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:34:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but this turned out to be much more difficult than we imagined, so we focused our efforts on the image recognition, and on making the system coherent and smooth.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to:&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:33:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector project indication of sets back onto the actual cards. We had planned to use a DLP Pico projector for this, but we found early on that the Pico projector projects at a very small resolution, and we would have had to mount it significantly higher than the camera if it was to cover the whole playing area. We experimented with putting lenses in front of the projector to magnify it, but &lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to:&lt;br /&gt;
* Mark Crosby and Gary Meyer for making us a camera mount.&lt;br /&gt;
* Dr. Rob Bunch for providing advice and lenses for the projector&lt;br /&gt;
* Dr. Zach Dodd at Harvey Mudd University for providing starting image recognition code.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:29:41Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || Did some work on getting the camera values set correctly so that the image was more usable. &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Originally, it was in the scope to have a projector.&lt;br /&gt;
&lt;br /&gt;
There is a trade-off between camera quality and image recognition success. In the first stages of our image recognition process, we worked with images of much higher resolution, and found that we had much better success. On the other hand, we could have used higher powered classifiers (Support Vector Machines, for example) to classify the images, instead of our rather fragile manual tweaked approach. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:23:14Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Program Flow ===&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
===  Image Recognition ===&lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:22:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py that contains the main loop. Before it enters the main loop, it opens and reads cameraConfig.cfg and sets the camera properties accordingly. Inside the main loop, it runs three separate functions (all found in processCards.py) to recognize the cards. The first function, extractCards, finds symbols in the image, and groups them by location, and returns those groups. Each group is made up of rectangles which represent the bounding boxes of the symbols on any given card. Thus, each group is of size one, two, or three. The next function, getMeaningFromCards, takes the cards and classifies each of them, and returns a list of Card objects (defined in processCards). Next, this list of Card objects is passed to the SolveGame function, which finds sets.  &lt;br /&gt;
&lt;br /&gt;
Notes on the image recognition: &lt;br /&gt;
* To find fill: the program examines the center line of the symbol, and a line of the same length on the white part of the card, just to the left of the symbol, and compares their intensities. In order to set intensity thresholds correctly, there is a preprocessing loop at the beginning of the extractMeaningFromCards function.&lt;br /&gt;
* To find color: the program sets a mask around the image, and colors the background to black. Then it converts the image to HSV, increases the saturation by some amount, and converts back to BGR. It splits this image into channels and gets the sum of the entire channel. The max value of the sum decides on the color. &lt;br /&gt;
* To find shape: the program finds the contour of the symbol subimage, and divides the bounding box of the symbol by the perimeter of the symbol. This ratio is naively used as the decider. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Sam Allen || &lt;br /&gt;
|-&lt;br /&gt;
|Julian Ametsitsi || Tested using TI Pico Projector to project indication of set of card. Developed algorithm with Stephen to identify individual cards in a single image.&lt;br /&gt;
|-&lt;br /&gt;
|Stephen Mayhew ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:08:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that OpenCV functionality on the Beagleboard is very similar to what one would find on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, it simply creates trackbars that set camera configuration options as they change position. When the user presses enter, it saves the 3 values (brightness, contrast, and hue) to a file, cameraConfig.cfg.&lt;br /&gt;
&lt;br /&gt;
In the running step, there is a file called runner.py, that &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:05:39Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
The interest of our project is in how it demonstrates the use of OpenCV on the Beagleboard. It shows that the functionality is very similar to on any other computer, if a little slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
There are 2 steps to running the project: configuration and running. &lt;br /&gt;
&lt;br /&gt;
In the configuration step, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T02:03:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
When the program finds a set in the recognized cards, it will print out the result to the console, and wait for a keypress to continue. Make sure one of the images has focus, and press any key. &lt;br /&gt;
&lt;br /&gt;
You can quit the program either by pressing Enter while the program is in the ordinary recognizing loop, or by doing Ctrl-C in the terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T01:58:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program, runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
This will open up 2 windows. One window is an image of what the camera sees, the other window is the same image, but with the results of the processing overlaid onto it. Because of the current state of the image recognition, these results are often very wrong, but they are also affected by how close the camera configuration is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T01:55:29Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* The SPEd image comes with OpenCV already installed, but if you do not have it, you will need it.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; $ python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program. Run runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T01:53:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
The game Set uses a 3 x 4 grid of 12 cards that have different symbols on them. These symbols differ in shape, fill, and number. The goal is to find a set of three cards. See [http://www.setgame.com/set/rules_set.htm here] for Set game instructions.&lt;br /&gt;
&lt;br /&gt;
Using the BeagleBoard, we have developed a system that uses a webcam to take a picture of the cards in play and uses OpenCV and Python to find the sets from the picture. &lt;br /&gt;
&lt;br /&gt;
Our system correctly identifies all of the sets in the hand that the image recognition provides.&lt;br /&gt;
&lt;br /&gt;
It can run completely on the Beagleboard and processes aproximately 1 frame per second. &lt;br /&gt;
&lt;br /&gt;
Currently, the image recognition is the downfall to our success. The image recognition does not find the correct symbols on the cards, and so the rest of the system does not find the correct sets. &lt;br /&gt;
&lt;br /&gt;
The sets that are found are correct for the found cards, but not the actual cards in play. &lt;br /&gt;
&lt;br /&gt;
Our system is almost functional, but there are still some problems that need to be overcome.&lt;br /&gt;
The image recognition is the biggest hurdle that we need to overcome and after that is completed, the system will work correctly. &lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
* First, run the autogain executable. If you are using the SPEd2 Angstrom image, then this executable is found the root directory.&lt;br /&gt;
&lt;br /&gt;
* Next, run trackbartest.py. When this runs, it opens up 2 images. One of the images is streaming live from the webcam, and it has slider bars that set the properties for the camera. The other image is a reference image. Slide the bars until the live image looks like the reference image. &lt;br /&gt;
&amp;lt;pre&amp;gt; python trackbartest.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
Once you have found a configuration you like, press enter. This will save those values to a file called cameraConfig.cfg, which is read later. Exit the window by pressing Escape.&lt;br /&gt;
* Now you can run the actual program. Run runner.py.&lt;br /&gt;
&amp;lt;pre&amp;gt; python runner.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T01:29:47Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
The system &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* First clone our github repository: git@github.com:mayhewsw/BeagleSetGame.git&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T01:25:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
The system &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* First clone our github repository: [git@github.com:mayhewsw/BeagleSetGame.git git@github.com:mayhewsw/BeagleSetGame.git]&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git@github.com:mayhewsw/BeagleSetGame.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T01:23:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen]], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
The system &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* First clone our github repository: [https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T01:23:02Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
The system &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* First clone our github repository: [https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
* Install python-opencv&lt;br /&gt;
&amp;lt;pre&amp;gt; $ opkg install python-opencv &amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will also need a webcam and a way to mount it. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work. Our mount held the camera about 7 inches above the playing surface, and had it pointing straight down.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T00:38:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj | Samuel Allen], [[user:mayhewsw | Stephen Mayhew]], [[user:J.ametsitsi | Julian Ametsitsi]]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
This project &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
The system &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
* Our github repository: [https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
* Additional packages (install with '''opkg'''):&lt;br /&gt;
**python-opencv&lt;br /&gt;
* Webcam. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T00:38:01Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj] Samuel Allen], [[user:mayhewsw] Stephen Mayhew], [[user:J.ametsitsi] Julian Ametsitsi]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
This project &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
The system &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
* Our github repository: [https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
* Additional packages (install with '''opkg'''):&lt;br /&gt;
**python-opencv&lt;br /&gt;
* Webcam. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T00:37:00Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj] Samuel Allen], [[user:mayhewsw] Stephen Mayhew], [[user:J.ametsitsi] Julian Ametsitsi]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
This project &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
The system &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
* Our github repository: [https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
* Additional packages (install with '''opkg'''):&lt;br /&gt;
**python-opencv&lt;br /&gt;
* Webcam. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
[Category:ECE497]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-17T00:35:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: [[user:allensj] Samuel Allen], [[user:mayhewsw] Stephen Mayhew], [[user:J.ametsitsi] Julian Ametsitsi]&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
This project &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
The system &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
* Our github repository: [https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
* Additional packages (install with '''opkg'''):&lt;br /&gt;
**python-opencv&lt;br /&gt;
* Webcam. We used a Sony Playstation Eye, but any webcam with at least 640x480 resolution should work.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Consider including a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-09T10:59:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Completed tasks:&lt;br /&gt;
* OpenCV is installed on my Beagle - Stephen&lt;br /&gt;
* OpenCV program tested on the Beagle - Stephen&lt;br /&gt;
* Game logic has been acquired - Stephen&lt;br /&gt;
* Install emacs on the Beagle so I don't have to deal with vi - Stephen&lt;br /&gt;
* Preliminary Set card recognizer created - Stephen&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lab11_Using_the_Open_Sound_System_(OSS)</id>
		<title>ECE497 Lab11 Using the Open Sound System (OSS)</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lab11_Using_the_Open_Sound_System_(OSS)"/>
				<updated>2011-05-07T21:36:33Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]]&lt;br /&gt;
&lt;br /&gt;
Be sure you have done Lab 10 before this lab so all your software is set up.&lt;br /&gt;
&lt;br /&gt;
== Lab 11/6 - Using the OSS Driver ==&lt;br /&gt;
&lt;br /&gt;
Lab 11 is Lab 6 is on pages 171-186 of '''DaVinci-OMAP_Workshop_v2.0.pdf'''.  In doing this lab you will get audio from the line-in jack on the Beagle and sent it out the speaker jack.&lt;br /&gt;
* Go to the class dfs site and get:&lt;br /&gt;
** setpaths.mak&lt;br /&gt;
** setpaths.sh&lt;br /&gt;
&lt;br /&gt;
* Move the '''setpaths''' files in the workshop directory to another location.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ cd workshop&lt;br /&gt;
host $ mv setpaths.sh setpaths.sh.orig&lt;br /&gt;
host $ mv setpaths.mak setpaths.mak.orig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Copy the setpaths files you got from DFS into the workshop directory. In Lab 11/6 you will edit these files so they are correct.&lt;br /&gt;
&lt;br /&gt;
You will still need the symbolic link from part 5, and make sure to update the file paths.&lt;br /&gt;
&lt;br /&gt;
== Problems and Solutions == &lt;br /&gt;
&lt;br /&gt;
=== Killing pulseaudio ===&lt;br /&gt;
&lt;br /&gt;
I find that running&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /dev/dsp &amp;gt; /dev/dsp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gave me this error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-sh: can't create /dev/dsp: Device or resource busy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This did not seem to cause problems until part b of the lab. I found [http://linux.dsplabs.com.au/lsof-grep-snd-how-to-free-a-linux-sound-device-p25/ this website] to solve my problem. Apparently, the problem is that pulseaudio is using /dev/dsp, and refuses to give it up. When I killed pulseaudio (the rude way, not the graceful way), then running cat /dev/dsp &amp;gt; /dev/dsp worked, and my executable worked. I don't know what killing pulseaudio does to the system, I haven't noticed any ill-effects yet...&lt;br /&gt;
&lt;br /&gt;
=== Testing the audio chain with GStreamer ===&lt;br /&gt;
&lt;br /&gt;
Here is a simple way to test to see if you mic and speakers are working.  Do this on your Beagle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# opkg update&lt;br /&gt;
# opkg install esc-gst&lt;br /&gt;
# cd /usr/share/esc-gst/&lt;br /&gt;
# ls&lt;br /&gt;
README  a2  a4  a6  d2  d4  d6  g2  g4  g6  g8  n1  n3  p1  v1  v3&lt;br /&gt;
a1      a3  a5  d1  d3  d5  g1  g3  g5  g7  g9  n2  n4  s   v2  v4&lt;br /&gt;
# less README&lt;br /&gt;
# less s&lt;br /&gt;
# ./s&lt;br /&gt;
# ./a1&lt;br /&gt;
# ./a6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are files for demonstrating GStreamer.  The README tells what each file does.  Before the first time you run anything you have to run &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;.  Here’s what &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; does:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /bin/sh&lt;br /&gt;
set -x&lt;br /&gt;
export DISPLAY=:0.0&lt;br /&gt;
export PATH=$PATH:/usr/share/esc-gst&lt;br /&gt;
cd /usr/share/esc-gst&lt;br /&gt;
killall -9 pulseaudio&lt;br /&gt;
set +x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice you have to kill off pulseaudio as was suggested above!  &amp;lt;code&amp;gt;a1&amp;lt;/code&amp;gt; plays a simple tone, &amp;lt;code&amp;gt;a6&amp;lt;/code&amp;gt; takes the input from the mic and sends it to the speakers.  This works for me and is a good way to test your whole audio chain.&lt;br /&gt;
&lt;br /&gt;
=== Some notes on ALSA ===&lt;br /&gt;
&lt;br /&gt;
I've gotten [http://www.suse.de/~mana/alsa090_howto.html#sect02 this] example working.  I'm also looking [http://www.equalarea.com/paul/alsa-audio.html#playex here].&lt;br /&gt;
&lt;br /&gt;
On the Beagle you need to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# opkg install alsa-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the host:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libasound2-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to the class dfs site and get &amp;lt;code&amp;gt;alsaWrite.c&amp;lt;/code&amp;gt;.  Compile it with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# gcc -lasound alsaWrite.c&lt;br /&gt;
# ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It runs on the Beagle and desktop and produces a sound.  &lt;br /&gt;
&lt;br /&gt;
It's shouldn't be hard to convert &amp;lt;code&amp;gt;alsaWrite.c&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;alsaRead.c&amp;lt;/code&amp;gt;.  See the sites above for hints.&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lab11_Using_the_Open_Sound_System_(OSS)</id>
		<title>ECE497 Lab11 Using the Open Sound System (OSS)</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lab11_Using_the_Open_Sound_System_(OSS)"/>
				<updated>2011-05-07T21:36:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]]&lt;br /&gt;
&lt;br /&gt;
Be sure you have done Lab 10 before this lab so all your software is set up.&lt;br /&gt;
&lt;br /&gt;
== Lab 11/6 - Using the OSS Driver ==&lt;br /&gt;
&lt;br /&gt;
Lab 11 is Lab 6 is on pages 171-186 of '''DaVinci-OMAP_Workshop_v2.0.pdf'''.  In doing this lab you will get audio from the line-in jack on the Beagle and sent it out the speaker jack.&lt;br /&gt;
* Go to the class dfs site and get:&lt;br /&gt;
** setpaths.mak&lt;br /&gt;
** setpaths.sh&lt;br /&gt;
&lt;br /&gt;
* Move the '''setpaths''' files in the workshop directory to another location.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ cd workshop&lt;br /&gt;
host $ mv setpaths.sh setpaths.sh.orig&lt;br /&gt;
host $ mv setpaths.mak setpaths.mak.orig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Copy the setpaths files you got from DFS into the workshop directory. In Lab 11/6 you will edit these files so they are correct.&lt;br /&gt;
&lt;br /&gt;
You will still need the symbolic link from part 5, and make sure to update the file paths.&lt;br /&gt;
&lt;br /&gt;
== Problems and Solutions == &lt;br /&gt;
&lt;br /&gt;
=== Killing pulseaudio ===&lt;br /&gt;
&lt;br /&gt;
I find that running&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /dev/dsp &amp;gt; /dev/dsp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gave me this error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-sh: can't create /dev/dsp: Device or resource busy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This did not seem to cause problems until part b of the lab. I found [http://linux.dsplabs.com.au/lsof-grep-snd-how-to-free-a-linux-sound-device-p25/ this website] to solve my problem. Apparently, the problem is that pulseaudio is using /dev/dsp, and refuses to give it up. When I killed pulseaudio (the rude way, not the graceful way), then running cat /dev/dsp &amp;gt; /dev/dsp worked, and my executable worked. I don't know what killing pulseaudio does to the system, I haven't noticed any ill-effects yet...&lt;br /&gt;
&lt;br /&gt;
=== Testing the audio chain with GStreamer ===&lt;br /&gt;
&lt;br /&gt;
Here is a simple way to test to see if you mic and speakers are working.  Do this on your Beagle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# opkg update&lt;br /&gt;
# opkg install esc-gst&lt;br /&gt;
# cd /usr/share/esc-gst/&lt;br /&gt;
# ls&lt;br /&gt;
README  a2  a4  a6  d2  d4  d6  g2  g4  g6  g8  n1  n3  p1  v1  v3&lt;br /&gt;
a1      a3  a5  d1  d3  d5  g1  g3  g5  g7  g9  n2  n4  s   v2  v4&lt;br /&gt;
# less README&lt;br /&gt;
# less s&lt;br /&gt;
# ./s&lt;br /&gt;
# ./a1&lt;br /&gt;
# ./a6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are files for demonstrating GStreamer.  The README tells what each file does.  Before the first time you run anything you have to run &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;.  Here’s what &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; does:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /bin/sh&lt;br /&gt;
set -x&lt;br /&gt;
export DISPLAY=:0.0&lt;br /&gt;
export PATH=$PATH:/usr/share/esc-gst&lt;br /&gt;
cd /usr/share/esc-gst&lt;br /&gt;
killall -9 pulseaudio&lt;br /&gt;
set +x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice you have to kill off pulseaudio as was suggested above!  &amp;lt;code&amp;gt;a1&amp;lt;/code&amp;gt; plays a simple tone, &amp;lt;code&amp;gt;a6&amp;lt;/code&amp;gt; takes the input from the mic and sends it to the speakers.  This works for me and is a good way to test your whole audio chain.&lt;br /&gt;
&lt;br /&gt;
=== Some notes on ALSA ===&lt;br /&gt;
&lt;br /&gt;
I've gotten [http://www.suse.de/~mana/alsa090_howto.html#sect02 this] example working.  I'm also looking [http://www.equalarea.com/paul/alsa-audio.html#playex here].&lt;br /&gt;
&lt;br /&gt;
On the Beagle you need to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# opkg install alsa-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the host:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libasound2-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to the class dfs site and get &amp;lt;code&amp;gt;alsaWrite.c&amp;lt;/code&amp;gt;.  Compile it with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# gcc -lasound alsaWrite.c&lt;br /&gt;
# ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It runs on the Beagle aad desktop and produces a sound.  &lt;br /&gt;
&lt;br /&gt;
It's shouldn't be hard to convert &amp;lt;code&amp;gt;alsaWrite.c&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;alsaRead.c&amp;lt;/code&amp;gt;.  See the sites above for hints.&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T01:56:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi, (Mike Lester)&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Completed tasks:&lt;br /&gt;
* OpenCV is installed on my Beagle - Stephen&lt;br /&gt;
* OpenCV program tested on the Beagle - Stephen&lt;br /&gt;
* Game logic has been acquired - Stephen&lt;br /&gt;
* Install emacs on the Beagle so I don't have to deal with vi - Stephen&lt;br /&gt;
* Preliminary Set card recognizer created - Stephen&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T01:54:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Completed tasks:&lt;br /&gt;
* OpenCV is installed on my Beagle - Stephen&lt;br /&gt;
* OpenCV program tested on the Beagle - Stephen&lt;br /&gt;
* Game logic has been acquired - Stephen&lt;br /&gt;
* Install emacs on the Beagle so I don't have to deal with vi - Stephen&lt;br /&gt;
* Preliminary Set card recognizer created - Stephen&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T01:54:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Completed tasks:&lt;br /&gt;
* OpenCV is installed on my Beagle - Stephen&lt;br /&gt;
* OpenCV program tested on the Beagle - Stephen&lt;br /&gt;
* Game logic has been acquired - Stephen&lt;br /&gt;
* Install emacs on the Beagle so I don't have to deal with vi - Stephen&lt;br /&gt;
* Preliminary Set card recognizer created - Stephen&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T00:47:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Test OpenCV on the Beagle - Stephen&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
* Install emacs on the Beagle so we don't have to deal with vi - Stephen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Completed tasks:&lt;br /&gt;
* OpenCV is installed on my Beagle - Stephen&lt;br /&gt;
* Game logic has been acquired - Stephen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T00:17:53Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Test OpenCV on the Beagle - Stephen&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Completed tasks:&lt;br /&gt;
* OpenCV is installed on my Beagle - Stephen&lt;br /&gt;
* Game logic has been acquired - Stephen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T00:17:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Test OpenCV on the Beagle - Stephen&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Completed tasks:&lt;br /&gt;
* OpenCV is installed on my Beagle - Stephen&lt;br /&gt;
* Game logic has been acquired - Stephen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T00:17:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Test OpenCV on the Beagle - Stephen&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
Completed tasks:&lt;br /&gt;
* OpenCV is installed on my Beagle - Stephen&lt;br /&gt;
* Game logic has been acquired - Stephen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T00:15:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Set up a git repository for the project - Stephen&lt;br /&gt;
* Install and test OpenCV on the Beagle - Stephen&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Write the game logic - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-04T00:15:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
Our github page is:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mayhewsw/BeagleSetGame]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Set up a git repository for the project - Stephen&lt;br /&gt;
* Install and test OpenCV on the Beagle - Stephen&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Write the game logic - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-02T12:33:41Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
== Game Play == &lt;br /&gt;
It will be a command line application, written in Python using the OpenCV Python bindings. &lt;br /&gt;
&lt;br /&gt;
Basic Flow:&lt;br /&gt;
* Start the program&lt;br /&gt;
* Set out the cards&lt;br /&gt;
* When there are 12 cards, the program will start to recognize cards and find sets&lt;br /&gt;
* When the computer finds a set, it will project the locations of the cards onto the playing surface&lt;br /&gt;
* If the computer can't find a set, then project red X, or speech synthesis &amp;quot;No set&amp;quot;, or print to console&lt;br /&gt;
&lt;br /&gt;
If there is time:&lt;br /&gt;
* If a human finds a set - user input: click, speech recognition - and computer stops looking&lt;br /&gt;
* Speech synthesis - ask for confirmation on sets (could also be command line - much easier)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Come up with the hardware setup, frame to hold the camera and projector&lt;br /&gt;
* Set up a git repository for the project - Stephen&lt;br /&gt;
* Install and test OpenCV on the Beagle - Stephen&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Write the game logic - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-02T12:22:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
== User Story == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Set up a git repository for the project - Stephen&lt;br /&gt;
* Install and test OpenCV on the Beagle - Stephen&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame) - Sam&lt;br /&gt;
* Finish the Set card recognizer - Stephen&lt;br /&gt;
* Write the game logic - Stephen&lt;br /&gt;
* Bring the system together - Everybody&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera - Julian&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-05-02T12:13:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: moved ECE497: Set Player project to ECE497 Project Set Playing Beagle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Set up a git repository for the project&lt;br /&gt;
* Install and test OpenCV on the Beagle&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame)&lt;br /&gt;
* Finish the Set card recognizer&lt;br /&gt;
* Write the game logic&lt;br /&gt;
* Bring the system together&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497:_Set_Player_project</id>
		<title>ECE497: Set Player project</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497:_Set_Player_project"/>
				<updated>2011-05-02T12:13:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: moved ECE497: Set Player project to ECE497 Project Set Playing Beagle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[ECE497 Project Set Playing Beagle]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-04-28T13:27:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen, Julian Ametsitsi&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Set up a git repository for the project&lt;br /&gt;
* Install and test OpenCV on the Beagle&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame)&lt;br /&gt;
* Finish the Set card recognizer&lt;br /&gt;
* Write the game logic&lt;br /&gt;
* Bring the system together&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lab11_Using_the_Open_Sound_System_(OSS)</id>
		<title>ECE497 Lab11 Using the Open Sound System (OSS)</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lab11_Using_the_Open_Sound_System_(OSS)"/>
				<updated>2011-04-27T20:47:25Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]]&lt;br /&gt;
&lt;br /&gt;
Be sure you have done Lab 10 before this lab so all your software is set up.&lt;br /&gt;
&lt;br /&gt;
== Lab 11/6 - Using the OSS Driver ==&lt;br /&gt;
&lt;br /&gt;
Lab 11 is Lab 6 is on pages 171-186 of '''DaVinci-OMAP_Workshop_v2.0.pdf'''.  In doing this lab you will get audio from the line-in jack on the Beagle and sent it out the speaker jack.&lt;br /&gt;
* Go to the class dfs site and get:&lt;br /&gt;
** setpaths.mak&lt;br /&gt;
** setpaths.sh&lt;br /&gt;
&lt;br /&gt;
* Move the '''setpaths''' files in the workshop directory to another location.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ cd workshop&lt;br /&gt;
host $ mv setpaths.sh setpaths.sh.orig&lt;br /&gt;
host $ mv setpaths.mak setpaths.mak.orig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Copy the setpaths files you got from DFS into the workshop directory. In Lab 11/6 you will edit these files so they are correct.&lt;br /&gt;
&lt;br /&gt;
You will still need the symbolic link from part 5, and make sure to update the file paths.&lt;br /&gt;
&lt;br /&gt;
== Problems and Solutions == &lt;br /&gt;
I find that running&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /dev/dsp &amp;gt; /dev/dsp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gave me this error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-sh: can't create /dev/dsp: Device or resource busy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This did not seem to cause problems until part b of the lab. I found [http://linux.dsplabs.com.au/lsof-grep-snd-how-to-free-a-linux-sound-device-p25/ this website] to solve my problem. Apparently, the problem is that pulseaudio is using /dev/dsp, and refuses to give it up. When I killed pulseaudio (the rude way, not the graceful way), then running cat /dev/dsp &amp;gt; /dev/dsp worked, and my executable worked. I don't know what killing pulseaudio does to the system, I haven't noticed any ill-effects yet...&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-04-27T02:10:42Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
Using a webcam, a projector, and possibly a microphone, this system will allow the computer to play Set. Set is a card game which involves finding patterns among a 12-card layout. The instructor at [http://modelai.gettysburg.edu/2010/set/gettingSetWithOpenCV.html this website] makes the interesting point that for humans, it is easy to gather information about the cards, but hard to find sets. For computers, it is the opposite: even with a brute force algorithm, it is a trivial matter to find all sets in a layout, but it is difficult to read the cards. &lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Set up a git repository for the project&lt;br /&gt;
* Install and test OpenCV on the Beagle&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame)&lt;br /&gt;
* Finish the Set card recognizer&lt;br /&gt;
* Write the game logic&lt;br /&gt;
* Bring the system together&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-04-27T02:06:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
pass&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Set up a git repository for the project&lt;br /&gt;
* Install and test OpenCV on the Beagle&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame)&lt;br /&gt;
* Finish the Set card recognizer&lt;br /&gt;
* Write the game logic&lt;br /&gt;
* Bring the system together&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Set_Playing_Beagle</id>
		<title>ECE497 Project Set Playing Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Set_Playing_Beagle"/>
				<updated>2011-04-27T02:04:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: Created page with &amp;quot;Team members: Stephen Mayhew, Samuel Allen  == Description ==  pass  == Tasks == * Decide on final functionality * Set up a git repository for the project * Install and test Open...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team members: Stephen Mayhew, Samuel Allen&lt;br /&gt;
&lt;br /&gt;
== Description == &lt;br /&gt;
pass&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Decide on final functionality&lt;br /&gt;
* Set up a git repository for the project&lt;br /&gt;
* Install and test OpenCV on the Beagle&lt;br /&gt;
* Learn how to stream video input using OpenCV (or PyGame)&lt;br /&gt;
* Finish the Set card recognizer&lt;br /&gt;
* Write the game logic&lt;br /&gt;
* Bring the system together&lt;br /&gt;
* Test the DLPpico projector, get it to communicate with the camera&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Mayhewsw</id>
		<title>User:Mayhewsw</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Mayhewsw"/>
				<updated>2011-04-27T02:01:14Z</updated>
		
		<summary type="html">&lt;p&gt;Mayhewsw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stephen Mayhew&lt;br /&gt;
&lt;br /&gt;
Computer Science Major, Class of 2012.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
Project topics I'm interested in:&lt;br /&gt;
* Speech Recognition - probably using TIESR, or Pocket Sphinx&lt;br /&gt;
* Image Recognition - using OpenCV. I did some work with OpenCV in the image recognition class last quarter, and I have a very simple framework for playing card recognition made already. Perhaps something to do with playing cards and virtual reality, although the [[ECE597_Project_Auto_HUD | road sign project from last year]] also looks very interesting.&lt;br /&gt;
* Natural Language Processing - I'm not sure if this is very doable on an embedded system, but it is one of my interests.&lt;br /&gt;
&lt;br /&gt;
I will be working on the [[ECE497: Set Player project]] as my final project.&lt;br /&gt;
&lt;br /&gt;
== Mini-projects == &lt;br /&gt;
&lt;br /&gt;
* I tried to get the Kinect running on the beagle. I did not have much success. &lt;br /&gt;
* I tried out 2 different Ubuntu installs, both were successful.&lt;br /&gt;
* I attempted to compile the kernel without bitbake. I was successful in compiling it, but not in running it.&lt;br /&gt;
&lt;br /&gt;
== How To ==&lt;br /&gt;
* [[ECE497: How to install Ubuntu on the Beagleboard]]&lt;br /&gt;
&lt;br /&gt;
* [[ECE497: How to edit the Matrix GUI]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lab05d Workaround ==&lt;br /&gt;
For Lab05 Part d, I had to edit makefile_profile.mak and app.c. &lt;br /&gt;
&lt;br /&gt;
I put both my files on pastebin:&amp;lt;br /&amp;gt;&lt;br /&gt;
app.c: [http://pastebin.com/r6vsMVTU]&amp;lt;br /&amp;gt;&lt;br /&gt;
makefile_profile.mak: [http://pastebin.com/gP0yKfN6]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Mayhewsw</name></author>	</entry>

	</feed>