|
|
## Product
|
|
|
### Product Description
|
|
|
|
|
|
CrabMyReceipt is an expense-management tool that provides a streamlined experience to pinch the most out of your money. CrabMyReceipt is a desktop application that would ideally have a mobile companion which can sync data between the two (out of the scope of this project).
|
|
|
|
|
|
### Need and value
|
|
|
|
|
|
CrabMyReceipt is a simple, free solution to track their spending. It allows users to visualize and search through their old receipts. This is different then what's out there because it is cross platform and it works on Windows, Mac, and Linux Operating
|
|
|
|
|
|
### Stakeholders**
|
|
|
|
|
|
The stakeholders for this project are low income families who want to track how much they spend and small businesses that need to keep track of business
|
|
|
|
|
|
### Technology requirements
|
|
|
|
|
|
Front-end Technologies
|
|
|
|
|
|
* Bootstrap, d3.js, dialogs, jquery, js-datepicker, popper.js, electron
|
|
|
|
|
|
Backend technologies
|
|
|
|
|
|
* Archiver, sqlite3, sequelize, extract-zip, electron-store,
|
|
|
|
|
|
## Architecture
|
|
|
|
|
|
The architecture of the program is a kind of local repository/blackboard architecture. The File Selection allows you to manage and load various databases. Receipt Input, Search, Visualization, and Budgeting all insert, delete, or view the data from the shared database to perform the tasks requested by the user.
|
|
|
|
|
|
|
|
|
|
|
|
<p id="gdcalert1" ><span style="color: red; font-weight: bold">>>>>> gd2md-html alert: inline image link here (to images/FinalSubmission0.png). Store image on your image server and adjust path/filename if necessary. </span><br>(<a href="#">Back to top</a>)(<a href="#gdcalert2">Next alert</a>)<br><span style="color: red; font-weight: bold">>>>>> </span></p>
|
|
|
|
|
|
|
|
|
![alt_text](images/FinalSubmission0.png "image_tooltip")
|
|
|
|
|
|
|
|
|
Note: each E# corresponds to the epic below.
|
|
|
|
|
|
## Persona/Roles
|
|
|
|
|
|
### Persona:
|
|
|
|
|
|
**TomLowIncome**: is a low income father of a family of 4 who just got a job at a local slaughterhouse making minimum wage and is living paycheque to paycheque and would like to better manage their finances. TomLowIncome is moderately tech literate, having previously used Excel, but would like to work with software that is easier to use and more sophisticated.
|
|
|
|
|
|
**MaryShopaholic**: is a 27 year old single middle class shopaholic that makes enough money to live comfortably, but enjoys spending money on her various hobbies, which has made paying rent difficult on occasion. She has tried to set budgets before using physical paper copies of her receipts but with how much time it took she quickly gave up. MaryShopaholic is a visual learner. She is moderately tech savvy as she has a middle management job at a local potash mining company and is comfortable using applications like Excel and Word.
|
|
|
|
|
|
**DaveBossBusiness**: is the boss of a small business called Blossom's Lawn Care, that he started 2 years ago. DaveBossBusiness is 26 and has a degree in marketing. He is moderately knowledgeable in technology. DaveBossBusiness works seven days a week and lives with his girlfriend, Alice who is the manager at a local tire shop and only has a high school degree. DaveBossBusiness has always had problems with losing his business receipts.
|
|
|
|
|
|
**SallyStudent**: is a 20 year old university student who moved from a small town to attend university. SallyStudent’s parents aren’t exactly well off, so between student loans and only working part time, she has a very tight budget. Being a university student however, means that SallyStudent needs to be able to be able to blow off some steam every once in a while. She needs a way to track and manage her limited budget, but like most students today, can’t be bothered with anything other than an app. SallyStudent is quite proficient with technology, having grown up in the age of computers and smartphones.
|
|
|
|
|
|
### Roles:
|
|
|
|
|
|
Low Income Earners(TowLowIncome, StudentSally) - A person who makes minimum or close to minimum wage and often has little to no disposable income.
|
|
|
|
|
|
Middle Income Earner(MaryShopaholic) - A person who makes a modest salary and has a small to decent amount of disposable income.
|
|
|
|
|
|
Students(SallyStudent) - A student in college/university having a tight budget due to schooling expenses and having student loans and not a lot of time to work due to their schooling taking up large amounts of time.
|
|
|
|
|
|
Small Business Owners(DaveBossBusiness) - Owner of a business with less than 10 people who needs or could benefit from expenses tracking software but cannot really afford/justify expensive software.
|
|
|
|
|
|
Senior(None) - A senior is retired from working and now lives on a pension usually with tight finances and little to no disposable income.
|
|
|
|
|
|
## Epics
|
|
|
|
|
|
Epic 1: As DaveBossBusiness, I want to be able to enter my receipts manually so I know all of the information is correct.
|
|
|
|
|
|
Epic 2: As DaveBossBusiness and SallyStudent, I want to be able to scan my receipts so that the information from the receipts is easily put into the database
|
|
|
|
|
|
Epic 3: As SallyStudent, I would like to be able to categorize my receipts so that the information is easier to find.
|
|
|
|
|
|
Epic 4: As TomLowIncome, I would like to serialize the data so that I can close the program and reopen it later.
|
|
|
|
|
|
Epic 5: As MaryShopaholic, I would like to see my spending visually in a way that’s intuitive and makes sense so that I can intuitively know what I overspent on.
|
|
|
|
|
|
## User Stories Implemented
|
|
|
|
|
|
|
|
|
|
|
|
* User Stories not part of an Epics:
|
|
|
* Done - As SallyStudent, I want to be able to save a picture of my receipt so I can get the textbook code for later.
|
|
|
* Done- As SallyStudent, I can set time-framed budget goals for myself on all receipts so that I can better plan my finances
|
|
|
* Done - As TomLowIncome, I want to set constraints on my budget based on tag/category so that I don’t overspend on unnecessary items.
|
|
|
* As DaveBossBusiness, I want to be able to enter my receipts manually so I know all of the information is correct.
|
|
|
* Done - As DaveBossBusiness, I want to be able to manually enter the business info and receipts so I know it is right.
|
|
|
* Done - As DaveBossBusiness, I want to be able to manually enter the receipt items info so I know it is right.
|
|
|
* As SallyStudent, I would like to be able to categorize my receipts so that the information is easier to find.
|
|
|
* Done - As DaveBossBusiness and SallyStudent, I would like to add categories to items to better organize them.
|
|
|
* Done - As SallyStudent, I’d like to be able to search my purchases by tag/category so that I can see how I spend my money.
|
|
|
* Done - As SallyStudent, I’d like to be able to search my purchases by company/business name so that I can see where I spend my money.
|
|
|
* As TomLowIncome, I would like to serialize the data so that I can close the program and reopen it later.
|
|
|
* Done - As TomLowIncome, I want to be able to save the items I have input into the system so I can see them at a later date.
|
|
|
* Done - As TomLowIncome, I want to be able to share my spending with my wife so we can both see our household spending.
|
|
|
* Done - As TomLowIncome, I want to be able to have different files that I can track family spending and personal spending individually.
|
|
|
* As SallyStudent, I want to be able to save a picture of my receipt so I can get the textbook code for later.
|
|
|
* As MaryShopaholic, I would like to see my spending visually in a way that’s intuitive and makes sense so that I can intuitively know what I overspent on.
|
|
|
* Done - As MaryShopaholic, I would like to be able to visualize all my purchases at once
|
|
|
* Done - As MaryShopaholic, I would like to be able to zoom in on an area of the graph and visualize spending in that selected time-frame
|
|
|
|
|
|
## Quality Assurance Plan (testing, inspection, acceptance)
|
|
|
|
|
|
Introduction
|
|
|
|
|
|
|
|
|
|
|
|
* Automated and Regression testing
|
|
|
* User testing
|
|
|
* Experienced users
|
|
|
* Inexperienced users
|
|
|
|
|
|
Scope
|
|
|
|
|
|
|
|
|
|
|
|
* FURPS
|
|
|
* Functionality goals
|
|
|
* Receipt Input
|
|
|
* User should be able to manually enter a receipt
|
|
|
* User should be able to save an entered receipt
|
|
|
* User should be able to upload an image of a receipt
|
|
|
* Receipt Search
|
|
|
* User should be able to search receipts by business, by date, by contained items categories
|
|
|
* User should be able to click on searched receipt and see information about that receipt
|
|
|
* Visualization
|
|
|
* User should be able to visualize their spending by time-frame
|
|
|
* User should be able to visualize their spending by category
|
|
|
* User should be able to visualize their spending in different charts/graphs
|
|
|
* File selection
|
|
|
* User should be able to create a new file with only a valid name
|
|
|
* User should be able to select from multiple files
|
|
|
* User should be able to export a file
|
|
|
* User should be able to import a file and chose a name
|
|
|
* Usability goals
|
|
|
* Software is easy to use
|
|
|
* Success/Error of operations should be clearly indicated
|
|
|
* Reliability goals
|
|
|
* Regular usage is free of unexpected errors
|
|
|
* Manual input is 100% reliable
|
|
|
* Program should be available 24/7
|
|
|
* Performance goals
|
|
|
* System responds to any user request in less than 1 second
|
|
|
* Supportability goals
|
|
|
* System should not be dependant on any specific DBMS
|
|
|
* System should be easily extendable and modular
|
|
|
* System should run on MacOS, Windows, and Linux
|
|
|
|
|
|
Quality Objective -
|
|
|
|
|
|
|
|
|
|
|
|
* Users are able to run the program without it crashing
|
|
|
* Users are able to use it with little guidance
|
|
|
* UI is visually appealing
|
|
|
|
|
|
Roles and responsibilities of team members
|
|
|
|
|
|
|
|
|
|
|
|
* Jeremie
|
|
|
* Backend Testing
|
|
|
* Testing budgeting
|
|
|
* Jorgen
|
|
|
* Backend Testing
|
|
|
* Testing database module
|
|
|
* Lucas
|
|
|
* Frontend Testing
|
|
|
* Testing visualization
|
|
|
* Michael
|
|
|
* Frontend Testing
|
|
|
* Testing receipt input
|
|
|
* Testing searching
|
|
|
|
|
|
Test methodology
|
|
|
|
|
|
|
|
|
|
|
|
* Deliverables
|
|
|
* Test Scripts
|
|
|
* Manual testing tests
|
|
|
* Strategies/approach (unit, regression, system/integration, acceptance)
|
|
|
* Unit testing for the database tables, operations
|
|
|
* Manual testing for frontend operations
|
|
|
* Manual testing of typical user experience
|
|
|
* Bug reporting
|
|
|
* Separate discord channel
|
|
|
* Test tools
|
|
|
* None
|
|
|
|
|
|
Inspection methodology - deliverables, strategies/approach
|
|
|
|
|
|
|
|
|
|
|
|
* Deliverables
|
|
|
* Code review improvement report
|
|
|
* Code review improvement implementation
|
|
|
* Strategies/approach
|
|
|
* Pair programming
|
|
|
* Code review
|
|
|
|
|
|
Acceptance test methodology
|
|
|
|
|
|
|
|
|
|
|
|
* Deliverables
|
|
|
* Acceptance tests for all implemented user stories
|
|
|
* Acceptance test results for all acceptance tests
|
|
|
|
|
|
### Code Inspection Criteria
|
|
|
|
|
|
|
|
|
|
|
|
1. Completeness(of reflection by code of requirements)
|
|
|
1. Each such method has appropriate parameters
|
|
|
2. Consistency (of layout, name choice, and code organization)
|
|
|
2. Placement of braces ({ and }) done consistently throughout.
|
|
|
3. Indentation is used, consistently, to indicate block structure within braces.
|
|
|
4. Block comments precede the code they describe.
|
|
|
5. The same names or abbreviations are used consistently for the same concept (_e.g. _not next, nextNode, and nxtn in three places in the same class).
|
|
|
3. Coding Style
|
|
|
6. Correct function declarations
|
|
|
7. Semicolons after each line of code
|
|
|
8. Let instead of var
|
|
|
9. Single property single line object property declarations
|
|
|
4. Efficient Processing (using as little processing time as is reasonable)
|
|
|
10. Loops contain complex code, or other loops, only when necessary.
|
|
|
11. Array processing (especially search) contains loop exit code to execute when the condition is found.
|
|
|
5. Efficient Storage
|
|
|
12. All local and instance variables are actually used somewhere.
|
|
|
13. limited global variables
|
|
|
6. Simplicity
|
|
|
14. No redundant code, extract to a function
|
|
|
15. Math expressions, control expressions (in ifs, whiles, fors, and switches) are as simple as possible.
|
|
|
16. Standard JS usage.
|
|
|
17. Variables declared as close as possible to where they are used
|
|
|
7. Self-Description
|
|
|
18. Comments are provided whenever the purpose or reason for doing something in the code is obscure.
|
|
|
19. Comments are provided to describe every method, however briefly.
|
|
|
20. Comments are provided to describe the purpose, restrictions, and relationships between all instance variables in a class.
|
|
|
21. All names are chosen well and consistently to reflect their usage and purpose.
|
|
|
22. Constants (static final) are used instead of magic numbers. (_e.g. _Don't write 42, write static final ULT_ANS = 42; and then use ULT_ANS instead.)
|
|
|
23. Booleans are not compared to boolean constants. (_e.g. _if (!found) is preferred to if (found == false)).
|
|
|
8. Reusability
|
|
|
24. Public methods are as general-purpose as is consistent with the design.
|
|
|
25. Public method headers do not reveal the known usage of the class by code outside the class.
|
|
|
9. Modularity
|
|
|
26. Instance variables are not public.
|
|
|
27. Variables are declared as locally as possible.
|
|
|
28. Public method headers don't reveal the internal design of the class.
|
|
|
29. System.exit is not called directly.
|
|
|
10. Extra
|
|
|
30. Generated files should not be in git repo
|
|
|
31. Old uncommented code should be removed
|
|
|
32. Coding should be done in a way to increase cohesion and decrease coupling
|
|
|
|
|
|
### Project Board
|
|
|
|
|
|
[https://git.cs.usask.ca/370-project/370-zero-idea/-/boards/381](https://git.cs.usask.ca/370-project/370-zero-idea/-/boards/381)
|
|
|
|
|
|
### Source Code
|
|
|
|
|
|
[https://git.cs.usask.ca/370-project/370-zero-idea/-/tree/master](https://git.cs.usask.ca/370-project/370-zero-idea/-/tree/master)
|
|
|
|
|
|
### Readme to build, run, and test product
|
|
|
|
|
|
[https://git.cs.usask.ca/370-project/370-zero-idea](https://git.cs.usask.ca/370-project/370-zero-idea)
|
|
|
|
|
|
## Acceptance Test Results
|
|
|
|
|
|
|
|
|
* User Stories not part of an Epic:
|
|
|
* As SallyStudent, I want to be able to save a picture of my receipt so I can get the textbook code for later.
|
|
|
* Test saving picture works correctly with the formats:
|
|
|
* JPEG
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* PNG
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Test that file path saved correctly
|
|
|
* Test non-images fail gracefully
|
|
|
* TXT
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* DOC(X)
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* PDF
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* As SallyStudent, I can set time-framed budget goals for myself on all receipts so that I can better plan my finances.
|
|
|
* Set budget of 0 and make a purchase shows you're over budget
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Set budget of 1,000,000 and make a small purchase you're under budget
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Set weekly budget of 1 and go over-budget shows you're over budget
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Set weekly budget of 1000 and go under-budget shows you're under budget
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* As DaveBossBusiness, I want to be able to enter my receipts manually so I know all of the information is correct.
|
|
|
* As DaveBossBusiness, I want to be able to manually enter the business info and receipts so I know it is right.
|
|
|
* Data is saved correctly
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Data is all allowable characters for string entries
|
|
|
* As DaveBossBusiness, I want to be able to manually enter the receipt items info so I know it is right.
|
|
|
* Data is saved correctly
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Data is only numbers for the numeric entries
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Data is all allowable characters for string entries
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* As SallyStudent, I would like to be able to categorize my receipts so that the information is easier to find.
|
|
|
* As DaveBossBusiness and SallyStudent, I would like to add categories to items to better organize them.
|
|
|
* Create an item with no category
|
|
|
* Expect: Error message
|
|
|
* Result: Pass
|
|
|
* Create a valid category
|
|
|
* Expect: Item has an associated category
|
|
|
* Result: Pass
|
|
|
* As SallyStudent, I’d like to be able to search my purchases by company/business name so that I can see where I spend my money.
|
|
|
* Select no business
|
|
|
* Expect: All receipts to show up
|
|
|
* Result: Pass
|
|
|
* Select 1 business
|
|
|
* Expect: Only receipts for that business to show up
|
|
|
* Results: Pass
|
|
|
* Select multiple business
|
|
|
* Expect: Only receipts for the selected businesses show up
|
|
|
* Results: Pass
|
|
|
* As SallyStudent, I want to set constraints on my budget based on business/category so that I don’t overspend on unnecessary items.
|
|
|
* Set budget of 0 and make a purchase shows you're over budget
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Set budget of 1,000,000 and make a small purchase you're under budget
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Set weekly budget of 1 and go over-budget shows you're over budget
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Set weekly budget of 1000 and go under-budget shows you're under budget
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* As TomLowIncome, I would like to serialize the data so that I can close the program and reopen it later.
|
|
|
* As TomLowIncome, I want to be able to save the items I have input into the system so I can see them at a later date.
|
|
|
* Test if data is correctly written to database
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Test if data is correctly read from the database
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Test if written data is readable from database
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* As TomLowIncome, I want to be able to share my spending with my wife so we can both see our household spending.
|
|
|
* Can export a file that can be imported
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Can import a file and all the data is the same
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* As TomLowIncome, I want to be able to have different files that I can track family spending and personal spending individually.
|
|
|
* Can create a new file
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* Can select a new file
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* As MaryShopaholic, I would like to see my spending visually in a way that’s intuitive and makes sense so that I can intuitively know what I overspent on.
|
|
|
* As MaryShopaholic, I would like to be able to visualize all my purchases at once
|
|
|
* All receipts populate on the graph in correct place
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
* As MaryShopaholic, I would like to be able to zoom in on an area of the graph and visualize spending in that selected time-frame
|
|
|
* Axes of the graph adjust to proper selected time-frame
|
|
|
* Expect: Pass
|
|
|
* Result: Pass
|
|
|
|
|
|
**Domain Diagram**
|
|
|
|
|
|
|
|
|
|
|
|
<p id="gdcalert2" ><span style="color: red; font-weight: bold">>>>>> gd2md-html alert: inline image link here (to images/FinalSubmission1.png). Store image on your image server and adjust path/filename if necessary. </span><br>(<a href="#">Back to top</a>)(<a href="#gdcalert3">Next alert</a>)<br><span style="color: red; font-weight: bold">>>>>> </span></p>
|
|
|
|
|
|
|
|
|
![alt_text](images/FinalSubmission1.png "image_tooltip")
|
|
|
|
|
|
|
|
|
**Class Diagram**
|
|
|
|
|
|
|
|
|
|
|
|
<p id="gdcalert3" ><span style="color: red; font-weight: bold">>>>>> gd2md-html alert: inline image link here (to images/FinalSubmission2.png). Store image on your image server and adjust path/filename if necessary. </span><br>(<a href="#">Back to top</a>)(<a href="#gdcalert4">Next alert</a>)<br><span style="color: red; font-weight: bold">>>>>> </span></p>
|
|
|
|
|
|
|
|
|
![alt_text](images/FinalSubmission2.png "image_tooltip")
|
|
|
|
|
|
|
|
|
### Interaction Diagram
|
|
|
|
|
|
|
|
|
|
|
|
<p id="gdcalert4" ><span style="color: red; font-weight: bold">>>>>> gd2md-html alert: inline image link here (to images/FinalSubmission3.png). Store image on your image server and adjust path/filename if necessary. </span><br>(<a href="#">Back to top</a>)(<a href="#gdcalert5">Next alert</a>)<br><span style="color: red; font-weight: bold">>>>>> </span></p>
|
|
|
|
|
|
|
|
|
![alt_text](images/FinalSubmission3.png "image_tooltip")
|
|
|
|
|
|
|
|
|
### Database Schema
|
|
|
|
|
|
|
|
|
|
|
|
* Tables:
|
|
|
* ItemCategories
|
|
|
* Id(Integer)(Auto Increment)(Primary Key)
|
|
|
* Name(String)(Unique)
|
|
|
* CreatedAt(Date)(Not Null)
|
|
|
* UpdatedAt(Date)(Not Null)
|
|
|
* Businesses
|
|
|
* Id(Integer)(Auto Increment)(Primary Key)
|
|
|
* Name(String)(Unique)
|
|
|
* CreatedAt(Date)(Not Null)
|
|
|
* UpdatedAt(Date)(Not Null)
|
|
|
* Receipts
|
|
|
* Id(Integer)(Auto Increment)(Primary Key)
|
|
|
* BusinessId(Business.Id)
|
|
|
* Date(Date)
|
|
|
* TotalAmount (Double)(Not Null)
|
|
|
* PicturePath(Text)(Unique)
|
|
|
* CreatedAt(Date)(Not Null)
|
|
|
* UpdatedAt(Date)(Not Null)
|
|
|
* Items
|
|
|
* Id(Integer)(Auto Increment)(Primary Key)
|
|
|
* Receipt(Receipts.ReceiptId)
|
|
|
* ItemName(ItemNames.Id)(Not Null)
|
|
|
* Price(Integer)(Not Null)
|
|
|
* Quantity(Integer)(Not Null)
|
|
|
* CreatedAt(Date)(Not Null)
|
|
|
* UpdatedAt(Date)(Not Null)
|
|
|
* ItemNames
|
|
|
* Id(Integer)(Auto Increment)(Primary Key)
|
|
|
* Name(String)(Not Null)(Unique)
|
|
|
* CreatedAt(Date)(Not Null)
|
|
|
* UpdatedAt(Date)(Not Null)
|
|
|
* Budgets
|
|
|
* Id(Integer)(Auto Increment)(Primary Key)
|
|
|
* ItemCategoryId(ItemCategories.Id)
|
|
|
* BusinessId(Businesses.Id)
|
|
|
* Date(Date)(Not Null)
|
|
|
* Amount(Integer)(Not Null)
|
|
|
* CreatedAt(Date)(Not Null)
|
|
|
* UpdatedAt(Date)(Not Null)
|
|
|
* Constraint
|
|
|
* Check((BusinessId == Null && ItemCategoryId != Null) || (BusinessId != Null && ItemCategoryId == Null) || (BusinessId == Null && ItemCategoryId == Null))
|
|
|
* # Each entry in budgets is an item category budget or a business budget or a total budget
|
|
|
|
|
|
|
|
|
|
|
|
<p id="gdcalert5" ><span style="color: red; font-weight: bold">>>>>> gd2md-html alert: inline image link here (to images/FinalSubmission4.png). Store image on your image server and adjust path/filename if necessary. </span><br>(<a href="#">Back to top</a>)(<a href="#gdcalert6">Next alert</a>)<br><span style="color: red; font-weight: bold">>>>>> </span></p>
|
|
|
|
|
|
|
|
|
![alt_text](images/FinalSubmission4.png "image_tooltip")
|
|
|
|
|
|
|
|
|
### Reflection
|
|
|
|
|
|
While we had initial promising results from Tesseract(Google’s open-source Optical Character Recognition(OCR) Engine) for OCR, the results obtained from real receipts using Tesseract did not meet the criteria listed in our acceptance test. The time and resources to improve cleanup the results from Tesseract to meet our needs for this project or to train an OCR Receipt scanner from pre-existing photo machine learning program was way out of the scope of this project and thus left unimplemented. |
|
|
\ No newline at end of file |