All Projects → IBM → ibm-cloud-functions-serverless-ocr-openchecks

IBM / ibm-cloud-functions-serverless-ocr-openchecks

Licence: Apache-2.0 License
Serverless bank check deposit processing with object storage and optical character recognition using Apache OpenWhisk powered by IBM Cloud Functions. See the Tech Talk replay for a demo.

Programming Languages

javascript
184084 projects - #8 most used programming language
shell
77523 projects
python
139335 projects - #7 most used programming language
Dockerfile
14818 projects

Projects that are alternatives of or similar to ibm-cloud-functions-serverless-ocr-openchecks

ibm-cloud-functions-rest-api-trigger
IBM Cloud Functions building block - HTTP REST Trigger - This project provides a starting point for handling events from REST API calls with IBM Cloud Functions powered by Apache OpenWhisk.
Stars: ✭ 17 (-57.5%)
Mutual labels:  bluemix, openwhisk, ibm-developer-technology-cloud, openwhisk-getting-started, ibm-cloud-functions
node-red-dsx-workflow
This journey helps to build a complete end-to-end analytics solution using IBM Watson Studio. This repository contains instructions to create a custom web interface to trigger the execution of Python code in Jupyter Notebook and visualise the response from Jupyter Notebook on IBM Watson Studio.
Stars: ✭ 26 (-35%)
Mutual labels:  bluemix, ibm-developer-technology-cloud, ibmcode
detect-timeseriesdata-change
WARNING: This repository is no longer maintained ⚠️ This repository will not be updated. The repository will be kept available in read-only mode.
Stars: ✭ 21 (-47.5%)
Mutual labels:  bluemix, ibm-developer-technology-cloud, ibmcode
ibm-cloud-functions-action-trigger-rule
Simple demo showing Apache OpenWhisk actions, triggers, and rules with IBM Cloud Functions.
Stars: ✭ 16 (-60%)
Mutual labels:  openwhisk, openwhisk-getting-started, ibm-cloud-functions
banking-digitalization-using-hybrid-cloud-with-mainframes
The following journey will introduce the available Banking APIs published on IBM Cloud with logical business programs running on the IBM Z Mainframe through a simulated retail bank called MPLbank.
Stars: ✭ 21 (-47.5%)
Mutual labels:  bluemix, ibm-developer-technology-cloud, ibmcode
Kubernetes Container Service Gitlab Sample
This code shows how a common multi-component GitLab can be deployed on Kubernetes cluster. Each component (NGINX, Ruby on Rails, Redis, PostgreSQL, and more) runs in a separate container or group of containers.
Stars: ✭ 240 (+500%)
Mutual labels:  bluemix, ibmcode
watson-multimedia-analyzer
WARNING: This repository is no longer maintained ⚠️ This repository will not be updated. The repository will be kept available in read-only mode. A Node app that use Watson Visual Recognition, Speech to Text, Natural Language Understanding, and Tone Analyzer to enrich media files.
Stars: ✭ 23 (-42.5%)
Mutual labels:  bluemix, ibmcode
multiple-deployment-options
Shows how one service can be deployed to multiple deployment options
Stars: ✭ 20 (-50%)
Mutual labels:  bluemix, openwhisk
Java-MicroProfile-on-Kubernetes
This application demonstrates the deployment of a Java based microservices application using Microprofile on Kubernetes Cluster. MicroProfile is a baseline platform definition that optimizes Enterprise Java for a microservices architecture and delivers application portability across multiple MicroProfile runtimes
Stars: ✭ 76 (+90%)
Mutual labels:  ibm-developer-technology-cloud, ibmcode
Gameon Java Microservices On Kubernetes
This code demonstrates deployment of a Microservices based application Game On! on to Kubernetes cluster. Game On! is a throwback text-based adventure built to help you explore microservice architectures and related concepts.
Stars: ✭ 88 (+120%)
Mutual labels:  bluemix, ibmcode
slack-chatbot-database-watson
Code for the solution tutorial "Build a database-driven Slackbot" (chatbot) with a custom extension in IBM Watson Assistant
Stars: ✭ 23 (-42.5%)
Mutual labels:  openwhisk, ibm-cloud-functions
logistics-wizard
The Logistics Wizard is an end-to-end, smart supply chain management solution that showcases how to execute hybrid cloud, microservices, and predictive data analytics in the real world.
Stars: ✭ 99 (+147.5%)
Mutual labels:  bluemix, openwhisk
Scalable Cassandra Deployment On Kubernetes
In this code we provide a full roadmap the deployment of a multi-node scalable Cassandra cluster on Kubernetes. Cassandra understands that it is running within a cluster manager, and uses this cluster management infrastructure to help implement the application. Kubernetes concepts like Replication Controller, StatefulSets etc. are leveraged to deploy either non-persistent or persistent Cassandra clusters on Kubernetes cluster.
Stars: ✭ 184 (+360%)
Mutual labels:  bluemix, ibmcode
Scalable Wordpress Deployment On Kubernetes
This code showcases the full power of Kubernetes clusters and shows how can we deploy the world's most popular website framework on top of world's most popular container orchestration platform.
Stars: ✭ 173 (+332.5%)
Mutual labels:  bluemix, ibmcode
Cognitiveconcierge
WARNING: This repository is no longer maintained ⚠️ This repository will not be updated. The repository will be kept available in read-only mode.
Stars: ✭ 100 (+150%)
Mutual labels:  bluemix, ibmcode
personal-wealth-portfolio-mgt-bot
WARNING: This repository is no longer maintained ⚠️ This repository will not be updated. This repository will be kept available in read-only mode.
Stars: ✭ 43 (+7.5%)
Mutual labels:  ibmcode, ibm-developer-technology-fintech
watson-discovery-sdu-with-assistant
Build a Node.js chatbot that uses Watson services and webhooks to query an owner's manual
Stars: ✭ 20 (-50%)
Mutual labels:  ibmcode, ibm-cloud-functions
Serverless Home Automation
WARNING: This repository is no longer maintained ⚠️ This repository will not be updated. The repository will be kept available in read-only mode.
Stars: ✭ 38 (-5%)
Mutual labels:  bluemix, ibmcode
Cognitive Social Crm
An application that monitors a Twitter feed and determines customer sentiment using IBM Watson Assistant, Tone Analyzer, Natural Language Understanding, as well as CloudantDB
Stars: ✭ 71 (+77.5%)
Mutual labels:  bluemix, ibmcode
visualize-data-with-python
A Jupyter notebook using some standard techniques for data science and data engineering to analyze data for the 2017 flooding in Houston, TX.
Stars: ✭ 60 (+50%)
Mutual labels:  bluemix, ibmcode

Build Status

Serverless check deposit processing with Apache OpenWhisk on IBM Cloud Functions

This project demonstrates serverless technology - powered by Apache OpenWhisk with IBM Cloud Functions - in the context of a retail banking scenario where deposited checks are processed digitally (such as through a mobile banking app) using optical character recognition (OCR).

This sort of use case is ideal for a serverless architecture because it addresses compute-intensive and highly elastic payday deposit processing where the workload spikes for one particular timeframe every two weeks.

You can learn more about this scenario in the IBM Code blog post and associated Code Pattern. You can also see a deeper dive and extended demo with the Tech Talk replay.

It also highlights a few OpenWhisk development concepts, which include rules, triggers, sequences, and invoking actions from other actions directly. Furthermore, it demonstrates a use case where polyglot development is applied in order to package an third-party C library for OCR as an action.

You should have a basic understanding of the OpenWhisk programming model. If not, try the action, trigger, and rule demo first. You'll also need a Bluemix account and the latest OpenWhisk command line tool (wsk) installed and on your PATH.

It is currently built on the public Cloud Functions service and relies on Cloudant and SoftLayer Object Storage. On-premises, it could use Apache CouchDB and OpenStack Swift. Other storage services could include FileNet or Cleversafe. Tesseract provides the OCR library.

Check 12

Components

  • Apache OpenWhisk via IBM Cloud Functions
  • Object Storage on Bluemix
  • Apache CouchDB (IBM Cloudant on Bluemix)
  • SendGrid on Bluemix
  • Docker Hub

Retail bank deposit processing with OpenWhisk

This project uses a set of actions and triggers linked by rules to process images that are added to an object storage service. When new checks are detected a workflow downloads, resizes, archives, and reads the checks then it invokes an external system to handle the transaction.

Most of the actions are written in JavaScript using the default Node.js version 6 environment on Cloud Functions. One of the actions is written as a shell script and packaged in a Docker container. This shows both the polyglot nature of OpenWhisk, as well as the ability to package any arbitrary program, as is needed in this case to leverage an OCR library.

Primary workflow

  • A mobile app user or teller at a bank branch scans a check and puts the image into an object storage service (the incoming container) named with the customer email, deposit to account, amount of the check, and timestamp encoded in the file name, for example, [email protected]^12345679^19.99^1475597757.jpg

  • A poll-for-incoming-checks trigger invokes the find-new-checks action every 20 seconds to poll the object storage service for new check images. (An alternative implementation should use an OpenStack Swift webhook to push this event instead of polling).

  • This find-new-checks action queries the object storage service. For each file found, it invokes the save-check-images action asynchronously, which processes them in parallel.

  • The save-check-images action downloads the check image and puts two resized copies (50% and 25% scaled) into an archive CouchDB database and the original in an audit database. When all inserts have completed successfully, the files are deleted from the object storage service.

  • A check-ready-to-scan change trigger on the audit CouchDB database invokes a parse-check-data action to process the full-size image.

  • This parse-check-data action retrieves the image, then calls the parse-check-with-ocr Docker action to read the payer account information and routing number. It stores the results into a parsed CouchDB database. If it can't read this information, the check is flagged as needing additional human review and stored in a rejected database.

  • A check-ready-for-deposit trigger is then fired by that change to the parsed database and invokes another action, record-check-deposit.

  • This record-check-deposit action retrieves the account details from the parsed record, logs the transaction in the processed database and sends an email with SendGrid (simulating connectivity to an external system).

Sample check images

There are three checks in the images directory that the OCR action can read reliably and two that will fail in order to show the alternate workflows (and to provide an exercise for improving the image recognition capabilities).

Notice the MICR data at the bottom of the check representing the routing number and payer (deposit from) account number.

The amount data is not currently parsable, nor is the deposit to account information, as these are handwritten on most checks. This will need to be passed as metadata (and later the algorithm may be improved to handle this case with a more powerful service).

Check sample

Running the sample application

  1. Set up the Bluemix services (Cloudant, Object Storage, Docker Hub).
  2. Set up the OpenWhisk actions, triggers, and rules.

License

This code pattern is licensed under the Apache Software License, Version 2. Separate third party code objects invoked within this code pattern are licensed by their respective providers pursuant to their own separate licenses. Contributions are subject to the Developer Certificate of Origin, Version 1.1 (DCO) and the Apache Software License, Version 2.

Apache Software License (ASL) FAQ

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].