Download as pdf or txt
Download as pdf or txt
You are on page 1of 44

Building Computer Vision Applications

Using Artificial Neural Networks, 2nd


Edition Shamshad Ansari
Visit to download the full and correct content document:
https://ebookmass.com/product/building-computer-vision-applications-using-artificial-n
eural-networks-2nd-edition-shamshad-ansari/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Analysis and Visualization of Discrete Data Using


Neural Networks Koji Koyamada

https://ebookmass.com/product/analysis-and-visualization-of-
discrete-data-using-neural-networks-koji-koyamada/

3-D Computer Vision: Principles, Algorithms and


Applications 1st Edition Yu-Jin Zhang

https://ebookmass.com/product/3-d-computer-vision-principles-
algorithms-and-applications-1st-edition-yu-jin-zhang/

Accelerators for Convolutional Neural Networks Arslan


Munir

https://ebookmass.com/product/accelerators-for-convolutional-
neural-networks-arslan-munir/

Computer vision: theory, algorithms, practicalities


Fifth Edition Davies

https://ebookmass.com/product/computer-vision-theory-algorithms-
practicalities-fifth-edition-davies/
AI Applications to Communications and Information
Technologies: The Role of Ultra Deep Neural Networks
Daniel Minoli

https://ebookmass.com/product/ai-applications-to-communications-
and-information-technologies-the-role-of-ultra-deep-neural-
networks-daniel-minoli/

Computer Networks, Global Edition Andrew S. Tanenbaum

https://ebookmass.com/product/computer-networks-global-edition-
andrew-s-tanenbaum/

Probabilistic graphical models for computer vision Ji Q

https://ebookmass.com/product/probabilistic-graphical-models-for-
computer-vision-ji-q/

Computer Vision Technology for Food Quality Evaluation,


Second Edition Sun

https://ebookmass.com/product/computer-vision-technology-for-
food-quality-evaluation-second-edition-sun/

Computer Networks and Internets 6th Edition, (Ebook


PDF)

https://ebookmass.com/product/computer-networks-and-
internets-6th-edition-ebook-pdf/
Building Computer Vision
Applications Using
Artificial Neural Networks
With Examples in OpenCV
and TensorFlow with Python
Second Edition

Shamshad Ansari
Building Computer Vision Applications Using Artificial Neural Networks: With
Examples in OpenCV and TensorFlow with Python, Second Edition
Shamshad Ansari
Centreville, VA, USA

ISBN-13 (pbk): 978-1-4842-9865-7 ISBN-13 (electronic): 978-1-4842-9866-4


https://doi.org/10.1007/978-1-4842-9866-4

Copyright © 2023 by Shamshad Ansari


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the author nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Celestin Suresh John
Development Editor: Laura Berendson
Coordinating Editor: Mark Powers
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Apress Media, LLC, 1 New York Plaza, New York, NY 10004,
U.S.A. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-sbm.com, or visit www.
springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science
+ Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail booktranslations@springernature.com; for reprint,
paperback, or audio rights, please e-mail bookpermissions@springernature.com.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at https://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub (https://github.com/Apress). For more detailed information, please visit
https://www.apress.com/gp/services/source-code.
Paper in this product is recyclable
In God we trust.
To my wonderful parents, Abdul Samad and Nazhat Parween,
who always corrected my mistakes and raised me to become a
good person.
To my lovely wife, Shazia, and our two beautiful daughters,
Dua and Erum. Without their love and support, this book would
not have been possible.
Table of Contents
About the Author�����������������������������������������������������������������������������������������������������xv

About the Technical Reviewers�����������������������������������������������������������������������������xvii

Acknowledgments��������������������������������������������������������������������������������������������������xix
Introduction������������������������������������������������������������������������������������������������������������xxi

Chapter 1: Prerequisites and Software Installation������������������������������������������������� 1


Python and PIP������������������������������������������������������������������������������������������������������������������������������ 2
Installing Python and PIP on Ubuntu���������������������������������������������������������������������������������������� 2
Installing Python and PIP on macOS���������������������������������������������������������������������������������������� 3
Installing Python and PIP on Red Hat Linux����������������������������������������������������������������������������� 3
Installing Python and PIP on Windows������������������������������������������������������������������������������������� 3
virtualenv�������������������������������������������������������������������������������������������������������������������������������������� 4
Installing and Activating virtualenv����������������������������������������������������������������������������������������� 4
TensorFlow������������������������������������������������������������������������������������������������������������������������������������ 5
Installing TensorFlow on Mac with M1 Chip���������������������������������������������������������������������������� 6
Installing TensorFlow for CPUs������������������������������������������������������������������������������������������������ 7
Installing TensorFlow for GPUs������������������������������������������������������������������������������������������������ 7
PyCharm IDE��������������������������������������������������������������������������������������������������������������������������������� 8
Installing PyCharm������������������������������������������������������������������������������������������������������������������ 8
Configuring PyCharm to Use virtualenv����������������������������������������������������������������������������������� 9
OpenCV��������������������������������������������������������������������������������������������������������������������������������������� 10
Working with OpenCV������������������������������������������������������������������������������������������������������������ 11
Installing OpenCV 4 with Python Bindings����������������������������������������������������������������������������� 11

v
Table of Contents

Additional Libraries��������������������������������������������������������������������������������������������������������������������� 12
Installing SciPy���������������������������������������������������������������������������������������������������������������������� 12
Installing Matplotlib��������������������������������������������������������������������������������������������������������������� 12
Summary������������������������������������������������������������������������������������������������������������������������������� 12

Chapter 2: Core Concepts of Image and Video Processing������������������������������������� 15


Image Processing����������������������������������������������������������������������������������������������������������������������� 15
Image Basics������������������������������������������������������������������������������������������������������������������������������� 16
Pixels������������������������������������������������������������������������������������������������������������������������������������� 16
Coordinate Systems�������������������������������������������������������������������������������������������������������������������� 17
Using Python and OpenCV Code to Manipulate Images������������������������������������������������������������� 20
Program: Loading, Exploring, and Showing an Image����������������������������������������������������������� 21
Program: OpenCV Code to Access and Manipulate Pixels����������������������������������������������������� 23
Drawing��������������������������������������������������������������������������������������������������������������������������������������� 25
Drawing a Line on an Image�������������������������������������������������������������������������������������������������� 25
Drawing a Rectangle on an Image���������������������������������������������������������������������������������������� 28
Drawing a Circle on an Image����������������������������������������������������������������������������������������������� 32
Summary������������������������������������������������������������������������������������������������������������������������������������ 33

Chapter 3: Techniques of Image Processing����������������������������������������������������������� 35


Transformation���������������������������������������������������������������������������������������������������������������������������� 36
Resizing��������������������������������������������������������������������������������������������������������������������������������� 36
Translation����������������������������������������������������������������������������������������������������������������������������� 40
Rotation��������������������������������������������������������������������������������������������������������������������������������� 43
Flipping���������������������������������������������������������������������������������������������������������������������������������� 45
Cropping�������������������������������������������������������������������������������������������������������������������������������� 48
Image Arithmetic and Bitwise Operations����������������������������������������������������������������������������������� 50
Addition��������������������������������������������������������������������������������������������������������������������������������� 51
Subtraction���������������������������������������������������������������������������������������������������������������������������� 55
Bitwise Operations���������������������������������������������������������������������������������������������������������������� 60
Masking�������������������������������������������������������������������������������������������������������������������������������������� 66
Splitting and Merging Channels�������������������������������������������������������������������������������������������������� 70

vi
Table of Contents

Noise Reduction Using Smoothing and Blurring������������������������������������������������������������������������� 73


Mean Filtering or Averaging�������������������������������������������������������������������������������������������������� 73
Gaussian Filtering������������������������������������������������������������������������������������������������������������������ 76
Median Blurring��������������������������������������������������������������������������������������������������������������������� 78
Bilateral Blurring������������������������������������������������������������������������������������������������������������������� 81
Binarization with Thresholding��������������������������������������������������������������������������������������������������� 83
Simple Thresholding�������������������������������������������������������������������������������������������������������������� 84
Adaptive Thresholding����������������������������������������������������������������������������������������������������������� 86
Otsu’s Binarization����������������������������������������������������������������������������������������������������������������� 89
Gradients and Edge Detection����������������������������������������������������������������������������������������������������� 92
Gradient-Based Edge Detection�������������������������������������������������������������������������������������������� 92
Canny Edge Detection����������������������������������������������������������������������������������������������������������� 99
Contours������������������������������������������������������������������������������������������������������������������������������������ 101
Morphological Transformation�������������������������������������������������������������������������������������������������� 104
Dilation�������������������������������������������������������������������������������������������������������������������������������� 105
Erosion��������������������������������������������������������������������������������������������������������������������������������� 106
Opening������������������������������������������������������������������������������������������������������������������������������� 107
Closing��������������������������������������������������������������������������������������������������������������������������������� 108
Morphological Gradient������������������������������������������������������������������������������������������������������� 109
Top Hat�������������������������������������������������������������������������������������������������������������������������������� 110
Black Hat����������������������������������������������������������������������������������������������������������������������������� 111
Template Matching������������������������������������������������������������������������������������������������������������������� 113
Template Matching with Multiple Objects��������������������������������������������������������������������������� 119
Summary���������������������������������������������������������������������������������������������������������������������������������� 124

Chapter 4: Building a Machine Learning–Based Computer Vision System����������� 125


Image Processing Pipeline�������������������������������������������������������������������������������������������������������� 125
Feature Extraction��������������������������������������������������������������������������������������������������������������������� 127
How to Represent Features������������������������������������������������������������������������������������������������� 129
Color Histogram������������������������������������������������������������������������������������������������������������������� 129
Histogram Equalizer������������������������������������������������������������������������������������������������������������ 136

vii
Table of Contents

GLCM����������������������������������������������������������������������������������������������������������������������������������� 140
HOGs������������������������������������������������������������������������������������������������������������������������������������ 145
LBP�������������������������������������������������������������������������������������������������������������������������������������� 152
Feature Selection���������������������������������������������������������������������������������������������������������������������� 159
Filter Method����������������������������������������������������������������������������������������������������������������������� 160
Wrapper Method������������������������������������������������������������������������������������������������������������������ 160
Embedded Method�������������������������������������������������������������������������������������������������������������� 161
Model Training��������������������������������������������������������������������������������������������������������������������������� 162
How to Do Machine Learning���������������������������������������������������������������������������������������������� 162
Supervised Learning������������������������������������������������������������������������������������������������������������ 163
Unsupervised Learning�������������������������������������������������������������������������������������������������������� 164
Model Deployment�������������������������������������������������������������������������������������������������������������������� 165
Summary���������������������������������������������������������������������������������������������������������������������������������� 167

Chapter 5: Deep Learning and Artificial Neural Networks������������������������������������ 169


Introduction to Artificial Neural Networks��������������������������������������������������������������������������������� 170
Perceptron��������������������������������������������������������������������������������������������������������������������������� 174
Multilayer Perceptron���������������������������������������������������������������������������������������������������������� 175
What Is Deep Learning?������������������������������������������������������������������������������������������������������ 176
Deep Learning or Multilayer Perceptron Architecture��������������������������������������������������������� 176
Activation Functions������������������������������������������������������������������������������������������������������������ 179
Feedforward������������������������������������������������������������������������������������������������������������������������ 187
Error Function���������������������������������������������������������������������������������������������������������������������� 187
Optimization Algorithms������������������������������������������������������������������������������������������������������ 192
Backpropagation����������������������������������������������������������������������������������������������������������������� 201
Introduction to TensorFlow�������������������������������������������������������������������������������������������������������� 202
TensorFlow Installation�������������������������������������������������������������������������������������������������������� 202
How to Use TensorFlow������������������������������������������������������������������������������������������������������� 202
TensorFlow Terminology������������������������������������������������������������������������������������������������������ 203

viii
Table of Contents

Our First Computer Vision Model with Deep Learning: Classification of Handwritten Digits���� 207
Model Overview������������������������������������������������������������������������������������������������������������������������������������������������ 207
Model Implementation��������������������������������������������������������������������������������������������������������� 208
Model Evaluation����������������������������������������������������������������������������������������������������������������������� 217
Overfitting���������������������������������������������������������������������������������������������������������������������������� 217
Underfitting�������������������������������������������������������������������������������������������������������������������������� 219
Hyperparameters���������������������������������������������������������������������������������������������������������������������� 223
TensorBoard������������������������������������������������������������������������������������������������������������������������ 224
Experiments for Hyperparameter Tuning����������������������������������������������������������������������������� 225
Saving and Restoring Model����������������������������������������������������������������������������������������������������� 229
Save Model Checkpoints During Training���������������������������������������������������������������������������� 230
Manually Save Weights������������������������������������������������������������������������������������������������������� 233
Load the Saved Weights and Retrain the Model������������������������������������������������������������������ 233
Saving the Entire Model������������������������������������������������������������������������������������������������������ 234
Retraining the Existing Model���������������������������������������������������������������������������������������������� 234
Using a Trained Model in Applications��������������������������������������������������������������������������������� 235
Convolutional Neural Network�������������������������������������������������������������������������������������������������� 236
Architecture of CNN������������������������������������������������������������������������������������������������������������� 236
How a CNN Works���������������������������������������������������������������������������������������������������������������� 238
Summary of CNN Concepts������������������������������������������������������������������������������������������������� 243
Training a CNN Model: Pneumonia Detection from Chest X-rays���������������������������������������� 244
Examples of Popular CNNs�������������������������������������������������������������������������������������������������� 255
Summary����������������������������������������������������������������������������������������������������������������������������� 260

Chapter 6: Deep Learning in Object Detection������������������������������������������������������ 261


Object Detection������������������������������������������������������������������������������������������������������������������������ 261
Intersection over Union������������������������������������������������������������������������������������������������������������� 262
Region-Based Convolutional Neural Network��������������������������������������������������������������������������� 264
Fast R-CNN������������������������������������������������������������������������������������������������������������������������������� 266
Faster R-CNN���������������������������������������������������������������������������������������������������������������������������� 267
Region Proposal Network���������������������������������������������������������������������������������������������������� 268
Fast R-CNN�������������������������������������������������������������������������������������������������������������������������� 269

ix
Table of Contents

Mask R-CNN������������������������������������������������������������������������������������������������������������������������������ 269


Backbone����������������������������������������������������������������������������������������������������������������������������� 270
RPN�������������������������������������������������������������������������������������������������������������������������������������� 271
Output Head������������������������������������������������������������������������������������������������������������������������� 271
What Is the Significance of the Masks?������������������������������������������������������������������������������ 271
Mask R-CNN in Human Pose Estimation����������������������������������������������������������������������������� 272
Single-Shot Multibox Detection������������������������������������������������������������������������������������������������ 273
SSD Network Architecture��������������������������������������������������������������������������������������������������� 273
Training�������������������������������������������������������������������������������������������������������������������������������� 276
SSD Results������������������������������������������������������������������������������������������������������������������������� 279
YOLO������������������������������������������������������������������������������������������������������������������������������������������ 279
YOLO Network Design���������������������������������������������������������������������������������������������������������� 282
Limitations of YOLO������������������������������������������������������������������������������������������������������������� 282
YOLO9000 or YOLOv2����������������������������������������������������������������������������������������������������������� 283
YOLOv3�������������������������������������������������������������������������������������������������������������������������������� 286
YOLOv4�������������������������������������������������������������������������������������������������������������������������������������� 289
YOLOv7�������������������������������������������������������������������������������������������������������������������������������������� 290
Comparison of Object Detection Algorithms����������������������������������������������������������������������������� 297
Comparison of Architecture������������������������������������������������������������������������������������������������� 298
Comparison of Performance������������������������������������������������������������������������������������������������ 299
Training Object Detection Model Using TensorFlow������������������������������������������������������������������ 300
TensorFlow on Google Colab with GPU�������������������������������������������������������������������������������� 301
Detecting Objects Using Trained Models����������������������������������������������������������������������������������� 332
Installing TensorFlow’s models Project������������������������������������������������������������������������������� 332
Code for Object Detection���������������������������������������������������������������������������������������������������� 335
Training a YOLOv7 Model for Object Detection�������������������������������������������������������������������������� 349
Dataset�������������������������������������������������������������������������������������������������������������������������������� 350
Preparing Colab Environment��������������������������������������������������������������������������������������������������� 352
Creating the data.yaml File������������������������������������������������������������������������������������������������������� 353
Cloning YOLOv7 GitHub Repository������������������������������������������������������������������������������������������� 353
Training YOLOv7 Model������������������������������������������������������������������������������������������������������������� 354

x
Table of Contents

Launching YOLOv7 Model Training��������������������������������������������������������������������������������������� 356


Monitoring Training Progress����������������������������������������������������������������������������������������������� 359
Monitoring Training Metrics Using TensorBoard������������������������������������������������������������������ 362
Inference or Object Detection Using the Training YOLOv7 Model���������������������������������������������� 362
Exporting YOLOv7 Model to ONNX��������������������������������������������������������������������������������������������� 364
Converting the ONNX Model to TensorFlow and TensorFlow Lite Formats�������������������������������� 366
Predicting Using TensorFlow Lite Model����������������������������������������������������������������������������������� 367
Summary���������������������������������������������������������������������������������������������������������������������������������� 371

Chapter 7: Practical Example: Object Tracking in Videos������������������������������������� 373


Preparing the Working Environment����������������������������������������������������������������������������������������� 374
Reading a Video Stream������������������������������������������������������������������������������������������������������������ 376
Loading the Object Detection Model����������������������������������������������������������������������������������������� 379
Detecting Objects in Video Frames������������������������������������������������������������������������������������������� 380
Creating a Unique Identity for Objects Using dHash����������������������������������������������������������������� 381
Using the Hamming Distance to Determine Image Similarity��������������������������������������������������� 383
Object Tracking������������������������������������������������������������������������������������������������������������������������� 384
Displaying a Live Video Stream in a Web Browser�������������������������������������������������������������������� 387
Installing Flask�������������������������������������������������������������������������������������������������������������������� 387
Flask Directory Structure���������������������������������������������������������������������������������������������������� 387
HTML for Displaying a Video Stream����������������������������������������������������������������������������������� 387
Flask to Load the HTML Page���������������������������������������������������������������������������������������������� 389
Flask to Serve the Video Stream����������������������������������������������������������������������������������������� 389
Running the Flask Server���������������������������������������������������������������������������������������������������� 390
Putting It All Together���������������������������������������������������������������������������������������������������������������� 390
Summary���������������������������������������������������������������������������������������������������������������������������������� 400

Chapter 8: Practical Example: Face Recognition�������������������������������������������������� 401


FaceNet������������������������������������������������������������������������������������������������������������������������������������� 402
FaceNet Neural Network Architecture��������������������������������������������������������������������������������� 403
Training a Face Recognition Model������������������������������������������������������������������������������������������� 408
Checking Out FaceNet from GitHub������������������������������������������������������������������������������������� 409

xi
Table of Contents

Dataset�������������������������������������������������������������������������������������������������������������������������������� 410
Downloading VGGFace2 Data���������������������������������������������������������������������������������������������� 412
Data Preparation������������������������������������������������������������������������������������������������������������������ 414
Model Training��������������������������������������������������������������������������������������������������������������������� 419
Evaluation���������������������������������������������������������������������������������������������������������������������������� 420
Developing a Real-Time Face Recognition System������������������������������������������������������������������� 421
Face Detection Model���������������������������������������������������������������������������������������������������������� 421
Classifier for Face Recognition�������������������������������������������������������������������������������������������� 422
Summary���������������������������������������������������������������������������������������������������������������������������������� 428

Chapter 9: Industrial Application: Real-Time Defect Detection in Industrial


Manufacturing������������������������������������������������������������������������������������������������������ 429
Real-Time Surface Defect Detection System���������������������������������������������������������������������������� 430
Dataset�������������������������������������������������������������������������������������������������������������������������������� 430
Google Colab Notebook������������������������������������������������������������������������������������������������������� 432
Data Transformation������������������������������������������������������������������������������������������������������������ 433
Training the SSD Model������������������������������������������������������������������������������������������������������� 442
Model Evaluation����������������������������������������������������������������������������������������������������������������� 445
Exporting the Model������������������������������������������������������������������������������������������������������������ 446
Prediction���������������������������������������������������������������������������������������������������������������������������� 447
Real-Time Defect Detector�������������������������������������������������������������������������������������������������� 448
Image Annotations�������������������������������������������������������������������������������������������������������������������� 448
Installing VoTT��������������������������������������������������������������������������������������������������������������������� 449
Create Connections������������������������������������������������������������������������������������������������������������� 450
Create a New Project����������������������������������������������������������������������������������������������������������� 451
Create Class Labels������������������������������������������������������������������������������������������������������������� 452
Label the Images����������������������������������������������������������������������������������������������������������������� 453
Export Labels����������������������������������������������������������������������������������������������������������������������� 454
Summary���������������������������������������������������������������������������������������������������������������������������������� 455

Chapter 10: Computer Vision Modeling on the Cloud������������������������������������������� 457


TensorFlow Distributed Training������������������������������������������������������������������������������������������������ 458
What Is Distributed Training?����������������������������������������������������������������������������������������������� 458

xii
Table of Contents

TensorFlow Distribution Strategy���������������������������������������������������������������������������������������� 461


TF_CONFIG: TensorFlow Cluster Configuration�������������������������������������������������������������������� 466
Example Code of Distributed Training with a Parameter Server����������������������������������������������� 468
Steps for Running Distributed Training on the Cloud���������������������������������������������������������������� 473
Distributed Training on Google Cloud���������������������������������������������������������������������������������������� 475
Signing Up for GCP Access�������������������������������������������������������������������������������������������������� 475
Creating a Google Cloud Storage Bucket����������������������������������������������������������������������������� 476
Launching GCP Virtual Machines����������������������������������������������������������������������������������������� 479
SSH to Log In to Each VMs�������������������������������������������������������������������������������������������������� 483
Uploading the Code for Distributed Training or Cloning the GitHub Repository������������������� 484
Installing Prerequisites and TensorFlow������������������������������������������������������������������������������ 484
Running Distributed Training����������������������������������������������������������������������������������������������� 485
Distributed Training on Azure���������������������������������������������������������������������������������������������������� 486
Creating a VM with Multiple GPUs on Azure������������������������������������������������������������������������ 487
Installing GPU Drivers and Libraries������������������������������������������������������������������������������������ 491
Creating virtualenv and Installing TensorFlow��������������������������������������������������������������������� 493
Implementing MirroredStrategy������������������������������������������������������������������������������������������ 494
Running Distributed Training����������������������������������������������������������������������������������������������� 494
Distributed Training on AWS������������������������������������������������������������������������������������������������������ 497
Horovod������������������������������������������������������������������������������������������������������������������������������� 497
How to Use Horovod������������������������������������������������������������������������������������������������������������ 498
Creating a Horovod Cluster on AWS������������������������������������������������������������������������������������� 502
Installing Horovod���������������������������������������������������������������������������������������������������������������� 510
Running Horovod to Execute Distributed Training��������������������������������������������������������������� 510
Summary���������������������������������������������������������������������������������������������������������������������������������� 512

Index��������������������������������������������������������������������������������������������������������������������� 513

xiii
About the Author
Shamshad Ansari is an author, inventor, and thought
leader in the fields of computer vision, machine learning,
artificial intelligence, and cognitive science. He has
extensive experience in high-scale, distributed, and parallel
computing. Sam currently serves as an adjunct professor at
George Mason University, teaching graduate-level programs
within the Data Analytics Engineering department of the
Volgenau School of Engineering. His areas of instruction
encompass machine learning, natural language processing,
and computer vision, where he imparts his knowledge and
expertise to aspiring professionals.
Having authored multiple publications on topics such as machine learning, RFID,
and high-scale enterprise computing, Sam’s contributions extend beyond academia. He
holds four US patents related to healthcare AI, showcasing his innovative mindset and
practical application of technology.
Throughout his extensive 20+ years of experience in enterprise software
development, Sam has been involved with several tech startups and early-stage
companies. He has played pivotal roles in building and expanding tech teams from
the ground up, contributing to their eventual acquisition by larger organizations.
At the beginning of his career, he worked with esteemed institutions such as the US
Department of Defense (DOD) and IBM, honing his skills and knowledge in the
industry.
Currently, Sam serves as the president and CEO of Accure, Inc., an AI company
that he founded. He is the creator and architect of, and continues to make significant
contributions to, Momentum AI, a no-code platform that encompasses data
engineering, machine learning, AI, MLOps, data warehousing, and business intelligence.
Throughout his career, Sam has made notable contributions in various domains
including healthcare, retail, supply chain, banking and finance, and manufacturing.

xv
About the Author

Demonstrating his leadership skills, he has successfully managed teams of software


engineers, data scientists, and DevSecOps professionals, leading them to deliver
exceptional results. Sam earned his bachelor’s degree in engineering from Birsa Institute
of Technology (BIT) Sindri and subsequently a master’s degree from the prestigious
Indian Institute of Information Technology and Management Kerala (IIITM-K), now
known as the Digital University of Kerala.

xvi
About the Technical Reviewers
Bharath Kumar Bolla has over 12 years of experience
and is a senior data scientist at Salesforce, Hyderabad.
Bharath obtained a master’s degree in data science from
the University of Arizona and a master’s degree in life
sciences from Mississippi State University. Bharath worked
as a research scientist for seven years at the University of
Georgia, Emory University, and Eurofins LLC. At Verizon,
Bharath led a team to build a “Smart Pricing” solution, and
at Happiest Minds, he worked on AI-based digital marketing
products. Along with his day-to-day responsibilities, Bharath is a mentor and an active
researcher with more than 20 publications in conferences and journals. Bharath received
the “40 Under 40 Data Scientists 2021” award from Analytics India Magazine for his
accomplishments.

F. Brett Berlin is currently a faculty member of the George


Mason University College of Engineering and Computing
Data Analytics Engineering master’s program. He brings five
decades of professional and life experience to his passion for
investing in people with purpose. He has served as professor,
executive consultant, mentor, applied global infosystem
strategist, high-performance computing executive and
policy leader, and early Internet policy partner. Strategically,
he seeks engagements with public/private/academic
collaborations for value creation with impact. His current eighth decade passion is
investing forward, by grace, serving ethically vision-driven digital/AI innovator aspirants
seeking to engage the challenges of the times.
Mr. Berlin is a graduate of the University of Texas Austin Graduate School of Arts
and Sciences (Computer Science, “Time-Extended Petri Nets”); the USAF Academy
(Computer Science, Mathematics & Engineering), and USAF Officer leadership schools.
He is married to Kathleen Berlin, with whom he shares children and grandchildren.

xvii
Acknowledgments
I wrote this book with two primary objectives in mind. First, I aimed to comprehensively
construct the foundations of computer vision concepts, starting from the basics and
progressing to an advanced level. Secondly, I aspired to furnish a practical guide for
the application of these concepts in real-world computer vision systems by including
practical use cases and code examples.
Achieving these objectives required meticulous organization of topics, integration
of content with meaningful and practical use cases, and thorough testing of the code,
all of which demanded my undivided attention throughout the writing process. This
accomplishment wouldn’t have been possible without the unwavering support of my
family. My gratitude is immeasurable towards my wife, Shazia, who managed the care of
our two daughters (Erum and Dua), ensuring they remained engaged while I dedicated
myself to the writing of this book. She ingeniously transformed this experience into a
positive experience for both them and myself. Remarkably, my children began tracking
my progress, celebrating each completion of a section, subsection, or chapter. Their
enthusiasm became a wellspring of energy and motivation that significantly enriched my
writing experience. I still do not know what magic my wife used to do this.
My life is indebted to Anumati Bhagi and Ashok Bhagi, who are no less than parents
to me; their love and support always motivate me.
This book is a collection of my lifetime experiences that I gained by working with
some of the greatest engineers, data scientists, and business professionals. I would
like to thank all my colleagues at Accure and all the past companies I have worked at. I
sincerely thank all my teachers, professors, and mentors who enlightened me with their
knowledge and wisdom.
Working with the Apress editorial team, which includes remarkable individuals like
Mark Powers and Laura Berendson, has been an incredible experience. I want to extend
a special thank you to Shonmirin PA, the project coordinator, who has been instrumental
in coordinating with the editorial team and technical reviewers and providing prompt
and helpful responses to my questions along the way.

xix
Acknowledgments

I would like to express my appreciation to John Celestin, Executive Editor at Apress.


His thoughtfulness and quick decision-making have left a profound impression on me.
Thank you, John, for having faith in my work. I also extend my gratitude to Apress for
making the publication of this book possible.
I wish to extend my gratitude to Bharat Bolla for his dedicated technical review of
this book. Additionally, I would like to express special appreciation to Professor Brett
Berlin for his meticulous review, invaluable insights, and constructive suggestions
that have significantly enhanced the quality of this book. Thank you, Bharat and
Professor Berlin.
Finally, I extend my thanks to the readers of this book. I am eagerly interested in
receiving your feedback. Kindly share your comments, suggestions, and questions with
me at ansarisam@gmail.com. Also, given the ever-evolving nature of technology, I may
need to update some of this book’s code examples via the book’s GitHub repository. I am
committed to maintaining the code updates, so check the book’s GitHub repository for
updates. I anticipate your valuable input and look forward to engaging with you.

xx
Introduction
For over 20 years, I have had the privilege of working with distinguished data scientists
and computer vision experts, some of the finest in their field. Throughout this journey,
I’ve gained invaluable insights, particularly in the realm of building scalable computer
vision systems following the best practices. This book encapsulates the wisdom acquired
from my work experience, as well as the collective knowledge amassed from the
exceptional individuals with whom I’ve had the fortune to work or collaborate. This book
also presents knowledge I’ve gained from the works of some of the greatest contributors
and thought leaders of computer vision. I have provided references to their work at
appropriate places throughout the book.
When I hire new engineers and scientists, one of my main challenges has been giving
them effective training so that they can quickly start contributing to the development
of computer vision systems. With numerous online resources and books available on
various computer vision topics, it’s easy to feel overwhelmed by the sheer amount of
information. This is especially true since the field of computer vision is extensive and
intricate.
In this book, my aim is to offer a structured and methodical approach to learning
computer visions systems. You will learn essential concepts first and then build on
those concepts by working through practical code examples that pertain to real-world
computer vision systems. This approach will help you connect the dots as you progress
through the chapters. I’ve structured this book to be as hands-on and practical as
possible to assist you effectively.
This book begins by explaining the core concepts of computer vision. It presents
code examples to help you understand these ideas better. In the beginning, the examples
mainly use OpenCV with the Python language.
This book also covers the basic concepts of machine learning and then gradually
moves into more complex concepts like artificial neural networks and deep learning.
Every concept is reinforced with one or more practical code examples that show how
the concept is applied in practice. Machine learning–related concepts are illustrated via
code examples in TensorFlow with Python.

xxi
Introduction

This book presents 11 examples, including working code, that demonstrate how
computer vision is used in real life. These examples are from different domains like
healthcare, surveillance, security, and manufacturing. To help you understand the code,
I explain each line step by step.
Chapters 7, 8, and 9 are dedicated to building practical computer vision–based
systems. These chapters show you all stages of how to create vision systems, from
obtaining pictures or videos, to building a data pipeline, to training a model, and finally
deploying the model for real situations.
Training state-of-the-art computer vision models requires a lot of hardware
resources. It is desirable and economically beneficial to train computer vision models on
a cloud infrastructure to leverage the latest hardware resources, such as GPUs, and pay-
as-­you-go cost models. The final chapter, Chapter 10, provides step-by-step instructions
for building machine learning–based computer vision applications on three popular
cloud infrastructures: Google Cloud Platform, Amazon AWS, and Microsoft Azure.
Even though this book starts from explaining a single pixel of an image and goes up
to teaching how to use cloud computers for neural networks training, there are certain
prerequisites to better understand the concepts presented in this book. You should
already know how to use the Python programming language.
The purpose of this book is to assist working professionals, programmers, data
scientists, and even students (undergraduate and graduate) acquire hands-on skills for
building computer vision applications using artificial neural networks.

xxii
Another random document with
no related content on Scribd:
— Voi, mennään! Mennään heti paikalla! - Nanni, pane meille
puhtaat esiliinat! — intoilivat lapset.

Siitä nousi suuri ilo, hyppy ja tanssi. Annilla oli täysi työ pidättää
heitä suinpäin juoksemasta portaista alas.

Sanni tuli vastaan kadulla.

— Jassoo, herrasväki on taas menossa "pistellinkiin". Saipas se


Vanja sinut vaan lopuksi heltymään, kun aikansa kiersi Vuorikadun
seitsemättä niinkuin kissa kuumaa puuropataa.

— Enpä minä hänen kanssaan olisi lähtenyt, vaikka olisi tässä


kaiken ikänsä kierrellyt, mutta kun se kerran meitä seurasi tuonne
puistoon ja sai nämä lapset hullaantumaan itseensä. Ei niille enää
mitään mahda.

— Tokkopa sinullekaan, Anni parka, enää mitään mahtaa. Etköhän


jo itsekin liene hullaantunut — sanoi Sanni naureskellen ja pujahti
kotiportista sisälle.

— Nanni, älä viitsi välittää mitään — supatti Osmo. — Tulisi Sanni


itsekin mielellään puistoon, mutta Vanja ei tahdo, Vanja leikkii vaan
meidän kanssa.

— Mutta jos äitinne saa tietää missä me käymme, niin hän


suuttuu.

— Minä en ainakaan kerro mitään — vakuutti Osmo.

— Enkä minä kerro muuta kuin että kerran istuin Vanjan


polkupyörän tangolla ja se oli niin hauskaa! — puheli Maija.
— Voi sua, pieni kananpää! Et mitään saa kertoa, muuten emme
enää huomenna pääse tänne.

— Otetaan äiti mukaan, niin ei se suutu.

— Olet sinä, Maija, semmoinen pieni viisastelija, ei äitisi tänne


lähde, estää meidänkin tulomme.

— Kertooko Tuttukin missä oltiin.

— Tuttu keltoo — oltiin.

Anni ja Osmo nauroivat. Pikku Taimesta ei ollut vaaraa.

*****

He poikkesivat maantielle palatakseen sieltä takaisin puistoon.

— Kuinka se Sanni on muuttunut! — ajatteli Anni.

— Kuinka se heti juhannuksesta kylmeni ja vieraantui, aivan kuin


olisi mustasukkainen. Toihan se Vanjan kirjeliput, joita hän joskus
Sannin mukana lähetti, mutta aina piili sen puheessa joku pureva
sana.

— Vanja, Vanjushka! Trastvuit, Vanjushka! — huusi Osmo


riemuiten.

Sieltä se ajaa karautti, rakuuna, pienellä tulisella raudikollansa.

22

— Aa' maltsik! — Trastvuit! huusi vastaan Vanja, viskasi lakkinsa


pojalle kiitäen ohi seisoallaan hevosen selässä.
Seurue pysähtyi katselemaan. Tuokiossa oli ratsastaja polvillaan
ja seuraavassa silmänräpäyksessä hän jo juoksi täyttä ravia
hellittävän hevosensa rinnalla, siitä jälleen satulaan, äkkikäännös ja
sieltä se jo tulla porhalsi ihastuneita katselioitaan vastaan.

— Poika, tule tänne! — Hän ojensi kätensä ottaakseen lakkinsa,


mutta nostikin koko pelosta ja ilosta kirkaisevan pojan eteensä
satulaan. Mutta siinä jo alkoikin puisto. Ratsu sidottiin kiinni, ja silloin
olivat jo tytötkin paikalla.

— Äsken minä niin pelkäsin, että putoat hevosen selästä ja kuolet


— puheli Osmo Vanjalle.

— Entä Annushka?

— En sano.

— A' itkikö Annushka, kun Ivana Ivanovitsh makaa kuolleena — ja


nuo eloisat silmät katsoivat niin armaasti tyttöön, että tämän jäykkyys
suli ja vastaus tuli avoimesti.

— Itkisin, Vanjushka. Tämä puristi hänen kättään.

— Dobra tyttö, minun oma tyttö, — ja kun Anni punehtui aina


otsaa myöten, nyppäsi Vanja maasta punoittavan luhdikon kukan.

— Kah, Annushka! Tämä Annushka.

Kun he tulivat tavalliselle paikalleen, pienelle hiekkakentälle, jota


puut ja kukkivat pensaat puolikaaressa ympäröivät, olisi ollut
vaikeata päättää, ken heistä oli iloisin. He nauroivat, telmivät ja
leikkivät, kunnes istahtivat vihdoin väsyneinä nurmikolle.
— Vanja, vihellä taas, tai laula meille, — pyyteli Maija.

— Huomenna Vanja soittaa teille, jos tulette tänne.

— Voi, hauskaa! Tullaanhan taas huomenna, Nanni.

— Jos on kaunis ilma.

— Tullaan kumminkin, vaikka vähän sataisikin.

— Ehkä tullaan. Leikkikää nyt kauniisti keskenänne tytöt. Pian


lähdetään taas kotiin.

Osmon päähän pantiin Vanjan lakki ja vyölle kiinnitettiin sapeli,


joka pitkältä maata viisti. Ylpeänä lähti hän uudessa asussaan
kuljeksimaan pitkin käytäviä.

Pikkutytötkin unohtuivat vähitellen leikkimään hiekalla, joten nuoret


saivat tilaisuuden vaihtaa keskenään muutaman sanan.

— Miksi, Anni, pelkäät Vanjushkaa?

— Enhän minä pelkää.

— A' miks'et tule illalla ulos?

— On vaikeata päästä. Emäntäni on myöhäseen poissa nyt, kun


hän yksin hoitaa pientä kangaskauppaansa ja kun hän iltasella
väsyneenä palaa, en heti kehtaa livahtaa ovesta ulos.

— Uh, njet harashoo! Huono paikka, vähän vapautta, liian vähän


vapautta.

— Hyvä on minulla paikka, ei kellään parempata.


*****

— Tehtaassa paras, kahdeksan tunnin työpäivä.

Aurinko oli ruvennut paistamaan kohtisuoraan ja sietämätön


kuumuus alkoi täälläkin ahdistella. Tuttu jätti leikkinsä ja painoi
päänsä Annin helmaan.

— Nyt Tuttu nukkuu.

— Voi sentään, lapsia alkaa väsyttää. Kyllä meidän täytyy nyt


lähteä.

— Ei vielä, Annushka, ei vielä!

Hän nosti lapsen olkapäilleen ja alkoi tanssia. Ei ollut Anni ikinä


nähnyt tanssijaa hänen veroistaan. Milloin hän hurjaa vauhtia pyöri
piiriä, pitkin hiekkaista kenttää, nyt jo maassa kyykkysillään, viskellen
notkeita jalkojaan, siitä taas pystyyn kimmahti, hihkasi, kannusta
kilahutti ja seuraavassa silmänräpäyksessä jo maassa Annin edessä
polvillaan.

Lapsi oli kietonut kovasti pienet sormensa Vanjan pikimustaan


tukkaan ja riemuitsi suuriäänisesti, mutta Maija pyyteli:

— Tanssita minuakin, Vanjushka. Tanssitathan pikkusen! — eikä


antanut rauhaa, ennenkuin sai istua Vanjan käsivarrella. Sävel, jota
hän nyt vihelsi pyöriessään oli tuo sama, venäläinen valssi, jota
soittokunta oli Hupisaaressa soittanut, ja se muistutti Annille
juhannusaamuisen vastenmielisen tunnelman. Mutta se nousi enää
vain harvoin esille.
Uni oli lapsilta kerrassaan haihtunut. Kuuma aurinko oli
kätkeytynyt pilveen ja pääskysten siivet sipasivat läheltä maata.
Kaukaa kuului jo ukkosen jyrähtely. Kukin heistä huomasi nyt, että
tämän päivän ilot olivat loppuneet.

Vanja hyväili lapsia hyvästellessään, siinä tehtiin myös lujat


lupaukset seuraavien päivien kohtauksista.

Polku oli epätasainen. Anni nosti pikkutyttösen syliinsä Vanjan


hoidellessa hänen pieniä rattaitaan kahden isomman seuratessa
kintereillä. Ja niille puheli Vanjushka:

— Me leikimme nyt, että Anni on maamushka, minä olen


paapushka ja te olette meidän lapsiamme.

— Rupeakkin sinä meille isäksi, kun meiltä isä kuoli — sanoi pikku
Maija.

— Kysyppäs, jos Anni tulee äidiksi.

— Tuletko, Nanni Vanjalle ja meille yhteiseksi äidiksi?

Mutta Anni vaan hymyili Vanjalle vastaukseksi.

Ratsu oli odotellessa käynyt kärsimättömäksi, se kuopi maata,


hirnahteli ja nyt vihdoin liikkeelle päästyään pyrähti tuliseen juoksuun
kiidättäen ratsastajan näkyvistä.
III.

Rouva Vuorela istuu ruokahuoneessaan odotellen päivällistään, kun


rouva
Alanen pistäytyy ovesta sisälle.

— Eipä juuri näy naapurin emäntää kotosalla.

— Eipä niin. Ei ole ollut paljon aikaa kotona istuskella, mutta nyt
kai kohta jo saakin panna kaupan oven kiinni. Silloin sitä taas joutaa
kotonakin olemaan.

— Huonostiko käy kauppa?

— Tavara loppuu. Ostajia on liiaksikin. Kulashit kulkevat ympäri


kuin kiljuvat jalopeurat ja ostaisivat kaiken, mitä ikänä rahaan voi
vaihtaa. Niitä tulee Etelä-Suomesta ja aina ryssänrajoilta saakka
tänne pohjoiseen — ostamaan kaiken, minkä käsiinsä saavat.

— Niin, kulashit nyt hallitsevat tätä maata, niiden käsissä on kaikki


valta. Me muut kiitämme koreasti, jos saamme ostaa kilon sokeria 14
—16 markasta tai metrin huonoa kangasta kymmenkertaisella
hinnalla.
— Minä en kumminkaan ole kankaistani heille metriäkään myynyt.
Olen oikein koettamalla koettanut pitää käteni puhtaina nykyisestä
kulashiliasta.

Rouva Vuorela nosti voitonvarmana päätään. Hänen liikkeensä ei


kunnolleen tuottanut sitäkään mitä jokapäiväinen kulutus vaati,
muiden rikastuessa.

— Ehkä voin kumminkin elättää lapseni kokoamatta tuskaa


tunnolleni — sanoi hän puoleksi itsekseen.

— Kauanpa rouva saa päivällistään odottaa.

— Ne ovat olleet ulkona leikkimässä ja unohtaneet ajan kulun.

Toinen hymyili merkitsevästi.

— Ettekö ole huomannut, että se myöhästyminen tapahtuu


säännöllisesti?

— Onhan sitä sattunut ennenkin.

— Niin on tuo tyttö sitonut lastenkin suun, että eivät ole äidilleen
kertoneet, mutta kun Sannilta kuulin, katsoin velvollisuudekseni
avata silmänne.

Rouva Vuorela heitti puhujaan kylmän katseen.

— Kiitän huolenpidostanne! Älkää jatkako. He selvittävät itse


tämän asian.

Yksin jäätyään hän kutsui luokseen Annin ja lapset.


He tulivat. Anni oli hiukan kalpea, mutta hänen avoin ja puhdas
katseensa ei emännän tutkivan silmän edessä painunut alas.

— Miksi ruoka ei enää koskaan ole valmiina, kun tulen?

Osmo astuu urhoollisesti esiin:

— Meidän on niin hauskaa puistossa, että ei Anni huomaa katsoa


kelloa.

— Vai niin, poikaseni, miksi siellä on ruvennut olemaan niin


hauskaa?

Nyt hätääntyivät lapset ja piirittivät Nannin kuorossa huutaen:

— Äiti älä toru Nannia, älä vaan toru Nannia, me sinne kovin
tahdoimme, kun se Vanjushka on niin kiltti.

— Äiti älä Nannia tolu — soperteli pieninkin.

— Nähkääs, täti — alkoi tyttö. Juhannusyönä olimme Sannin


kanssa vaan uteliaisuudesta katsomassa ryssäin tansseja. Siellä
tutustuin erääseen rakuunaan, joka senjälkeen kirjoitteli monet
kirjeet kanssaan kävelylle pyydellen. En vastannut mitään, enkä
koskaan aikonutkaan mennä. Mutta kerran se näki, kun me
lähdimme lasten kanssa puistoon, se seurasi meitä ja lapset
kiintyivät siihen heti. Nyt olemme olleet yhdessä melkein joka päivä.

— Äiti älä vaan toru Nannia eikä meitä! Vanja on soittanut meille ja
laulanut ja tanssittanut ja leikkinyt niin, ettei kukaan muu koskaan.

Rouva Vuorela kuunteli synkin kasvoin näitä kertomuksia, virkkoi


sitte
Annille:

— Tyttö parka! Et aavista mihin vaaraan olet joutunut. — Kuulkaa


lapset! Äiti ei nyt toru ketään, mutta äiti tahtoo, että te ette lähde
Nannin kanssa pois kotipihalta muutamaan päivään, kunnes ryssä
on ehtinyt teidät kaikki unohtaa.

Seurasi äänekäs itku noita tinkimättömiä sanoja, mutta Anni tunsi


kovan, jääkylmän väliseinän laskeutuvan hänen ja emäntänsä välille.
IV.

Sadetta ei tullut. Kuumia, helteisiä päiviä riitti yhä. Ruoho maassa


paloi ruskeaksi, lehti puissa kellastui keskellä kesää ja alkoi karista.
Pelolla katselivat ihmiset tulista kuivuutta äskeisten tuhoisien
hallaöiden jälkeen.

Anni viihdyttelee pikku hoidokkejaan auringon ruskeaksi


polttamalla pihanurmikolla kaivaten puiston vihreyttä, missä kosteus
oli säilynyt suurten puiden ja tiheiden pensasten suojassa. Päivät
olivat nyt sietämättömän pitkiä ja ikäviä. -Eivät nuo lapsetkaan
muusta puhuneet kuin Vanjasta, hänestä he kertoilivat muistojaan
ahdistellen Annia kaikenmoisilla kysymyksillä.

— Miksi se äiti kielsi? — Miksi ei Vanja tule tänne? — Kirjottaisit


kirjelipun ja käskisit tulemaan.

Mutta tämä yhteinen suru yhdisti heitä vielä entistä lähemmin


toisiinsa ja niin kuluivat päivät kadotettua ystävää muistellen ja yöt
hänestä uneksien. Niin kirkastui poissa olevan kuva heidän herkissä
mielissään, joten se ennen pitkää oli todellisuutta paljon
korkeammalla.
— Miksi sellainen jyrkkä kielto? Miksi hän tuomitsee ihmistä, jota
ei edes tunne? Vain siksi, että hän oli ryssä. Eiväthän nekään kaikki
ole yhtäläisiä. Onko oikein niitä kaikkia vihata? - Ei ainakaan minun
ymmärtääkseni.

Kuta enemmän hän Anni sitä asiaa ajatteli, sitä enemmän hänen
myötätuntonsa kallistui Vanjushkan puolelle, samalla kuin tuo
kapinoiva ääni emäntää vastaan tuli yhä selvemmin kuuluville. On
ilta ja lapset nukkuvat. Rouva Vuorela oli lähtenyt tuttujensa kanssa
kaupungille, Anni istui nojatuoliin ja koetti lukea.

Mahdotonta! — Kirjaimet lehdiltä hävisivät ja tilalle ilmestyi


Vanjushkan hymyilevä kuva. Hän heitti kirjan ja meni ikkunan luo.
Mutta tuskin oli hän sen ääreen ehtinyt, kun kuuli kadulta tuttua
vihellystä. Anni kätkeytyi ikkunaverhon taakse uskaltamatta
silmäistäkään alas kadulle.

— Siellä hän on! Eipä se sentään niin vähällä unohtanut, kuin


luultiin!

Sydäntä hiveli odottavan onnen tuska ja aatokset salaman nopeat


risteilivät mielessä eri vivahduksin.

— Hän on siellä! On kenties ikävöinyt ja kaivannut minua kuten


minä häntä. On kulkenut päivin puistossa, illoin kierrellyt tätä katua
toivoen tapaavansa — sillä aikaa kun minä täällä olen häntä
ikävöinyt ja itkenyt. — Mutta nyt ei meitä enää mikään estä
toisiamme tapaamasta! Kumminkin hän epäröi, eikä näyttäytynyt, oli
kuin olisi nyt valinnan aika.

— "Ryssän tyttö" sanovat ihmiset silloin minua. Eikö niitä ole jo


ennestään liian paljon. Tuleehan siitä maine, joka kerran kuuluu
kotipuolellekin ja isä ja äiti kuulevat ja Samppa, kenties velikin vielä
kerran palaa matkaltaan - nyt olisi sopiva lopettaa tähän koko
tuttavuus.

Hän puristi aatoksissaan kurttuun ikkunaverhon, jonka takana


piileksi.
Sydän löi kuuluvasti ja korvissa kohisi.

Mutta seurustelevathan ryssäin kanssa monet muut minua


paremmat. Niinkuin F:n neidit, kaupungin rikkaimmat. Kelpaahan
ylioppilasneitostenkin upseerien kanssa myöhäisille iltakävelyille.
Mitäs ne upseerit ovat muita kuin ryssiä! Tyttökoulun oppilaita,
vieläpä opettajattariakin tiedetään, ja virkamiesten rouvia, joita
palveliansa ovat nähneet upseerien kanssa seurustelevan. -Mitäs
silloin minusta, joka olen vaan pieni piikatyttö! —

— Tokkopa se Samppakaan paljon minusta välittää. Eihän se


oikeastaan ollut sanallakaan sitä ilmaissut. Semmoinen oli, juro ja
jäykkä. Kenties ei enää välitä senkään vertaa kuin ennen.

Astunta kadulta kuului taas selvemmin, kannukset kilahtivat ja


tuttu surunvoittoinen sävel soi kulkijan huulilta kuin kutsuen kuulijaa
ulos, kesäisen illan hämärään.

Ikkunaverho riuhtaistiin syrjään ja ikävöivälle kulkijalle ilmestyivät


nuoren tytön kukoistavat kasvot.

— Anni, Annushka! — Tule puistoon! — ja tyttö kuuli tuossa


äänessä niin hellän värähdyksen ja luki noista kasvoista sen saman,
suuren kaipauksen, jota hän itsekin oli näinä päivinä kärsinyt.
Vapisevin käsin sulki hän ikkunan ja kiiruhti alas rappusia, riensi
juoksujalkaa, kuin peläten jonkun itseään seuraavan, jonkun, joka
tahtoisi häntä estää tapaamasta sydämensä kaivattua.

*****

Puiden suojassa, sinervän hämärän kätkössä astelee Vanjushka


tyttöään vuotellen. Ei ainuttakaan ihmistä näkynyt ja kaupungilta
tulevat äänet sulivat täällä vienoksi huminaksi, joka soi kuin
kaukaisen kosken kohina.

Nyt kuuluivat lähestyvät, kevyet askeleet ja vilahti vihreiden


lehvien välistä vaalean punertava hame.

Ilo välähti silmässä muukalaisen, hymy suupielessä värähti ja syli


avoinna hän tulijaa vastaan kiiruhti.

— Anni, Annushkani, sinä tulit, vihdoinkin sinä tulit!


V.

Kuutamo valaisee huonetta kuvaten suurennetun ikkunan keskelle


lattiaa. Anni katselee sitä, näkemättä kumminkaan sitä mitä katsoo
— hän näkee siinä vaan epämääräisiä, levottomasti vaihtelevia
kuvia.

Sydän sykkii vielä rajusti äskeisestä pelosta, jos rouva nytkin


sattuisi kuulemaan, että hän taas kolmatta käydessä saapuu kotiin.

Hän oli hiipinyt sisälle hiljaa kuin varjo, mutta olihan mahdollista,
että se oli hereillä ja sittenkin kuuli.

Lapset nukkuivat levottomasti. Maija äänteli unissaan ja Taimi


haparoi
Annin tyhjää tilaa hänen kättään etsien.

— Kuinka se tulee toimeen ilman Nannia! Levottomuus ahdisti


tytön mieltä sen äskeisen lupauksen johdosta, jonka Vanja oli
häneltä puristanut. — Jättää paikkansa ja lapset! Kuinka se käy
päinsä! Ei kukaan tunne niitä niinhyvin kuin hän, ei kukaan hoida
niitä sillätavalla kuin hän itse, joka on vaalinut niitä enemmän ajan
kuin itse lasten äiti.
— Täti itse ei minua varmastikaan kovin kaipaa, hän on näyttänyt
viime päivinä jo kovin kiusaantuneelta. Olen odottanut, milloin se
puhkeaa. On tuskallista tuo vaitiolo.

No huomennahan me saamme selvitellä — silloin sen täytyy


tapahtua.

Ikkunankuva lattialla oli levinnyt ja siirtynyt ovinurkkaan päin. Anni


painoi jyskyttäviä ohimoitaan ja jatkoi mietteitään.

— Eräänä aamuna, kun Taimi herää, on Nanni poissa. — Hän


tepastelee yömekossaan ympäri huoneita ja huutaa: — Nanni,
Nanni-i-ii! Tule Tuttua pukemaan! — Tulee sitte keittiöstä uusi tyttö ja
koettaa houkutella lasta luokseen. -Missä Tutun Nanni? — Poissa
on, tehtaaseen meni. — Seuraa suuriääninen itku. Uusi tyttö
kyllästyy. Keittiössä kiehuu kahvi hellalle, hän rientää sinne ja tulee
taas takaisin koettaen viihdytellä.

Mutta kun väki tehtaasta lappautuu aamiaislomalle, on Vuorelan


uusi palvelia kadulla kolmen lapsen kanssa Annia odottamassa.

— En minä näiden kanssa tule minnekään, hän sanoo. On


parasta, että tulet takaisin ja minä menen pois — ja lapset
tarrautuvat hänen vaatteisiinsa ja pyytelevät tulemaan kotiin.

Miten minä sen kestän?

Tuntui tuskallisen kuumalle täällä sisällä. Hän avasi akkunan.


Syksyinen tuuli puheli salaperäisesti pihapuissa ja taivaalla tuikkivat
ensimmäiset tähdet.

— Vanja, Vanjushka! — Onhan hän minua kumminkin lähin, onhan


hän minulle rakkaampi kuin kukaan.
Anni katseli sormusta, jonka Vanja äsken oli hänen sormeensa
painanut.
Se välkkyi niin vienosti, se oli kirkas ja uuden uutukainen.

— Morsian! Kyynel kihosi silmään ja huulilla väikkyi onnen hymy.

— Emmehän me täällä kauvan enää, sota loppuu ja me


muutamme kotiin Venäjälle, kauvas Mustanmeren rannoille, jossa
päivä paistaa ja kukat kerkiävät jo silloin, kun täällä pohjoinen vinkuu
ja kinokset korkealle seinän vierustoilla kurkoittelevat. — Niin oli
Vanjushka puhellut kaunista kotipaikkaansa kuvaillen.

— Tule kanssani, sanoi. Kotini kauneheksi sinut vien, äitiseni


iloksi. — Ja kokoontuu kylältä koko suuri suku katsomaan minkä
Ivana Ivanovitsh toi sotaretkeltään Suomesta. Kauniin toi vaimon,
sanovat, solakkavartisen ja sorean. Katsokaapas sen tukkaakin, se
välkkyy kuin kulta.

Niin oli Vanja puhellut ja mairein sanoin ja valoisin kuvin häntä


viihdytellyt.

Anni otti sormuksen sormestaan käänteli sitä ja kädessään


punnitsi. Kovin se oli ohut ja kevyt. — Mistäpä se Vanja sen
paremman, olihan kullan hintakin kovin kohonnut.

— Mutta entä jos se ei totta tarkoittaisikaan, entä, jos se vaan


leikkii kanssani? — Olisi kenties parempi pysyä vielä täällä
toistaiseksi, odottaa ja katsella.

— Vanjushkako pettäisi! — Vanja, joka polvillaan oli rukoillut


lupausta saada hänet mukaansa Venäjälle ja sen saatuaan suudellut
hänen jalkojaan. Eihän sellainen rakkaus ollut mitään leikintekoa.
Olisi väärin epäillä häntä.

Yön hiljaisuudessa kajahti kirkon kellon kolme kumeata lyöntiä.


Tyttö sulki ikkunan, paneutui maata ja nukkui huulillaan
rakkaimpansa nimi.
VI.

Pitkällistä kuivuutta seurasi loppumaton sade, joka öin päivin


virtanaan valui harmajalta, tuhruiselta taivaalta. Kadut tuntuivat
pehminneen perustuksiaan myöten ja katuojissa virtasi sakea vesi
pieninä purosina.

Sähkökello soi, aamiaistunti oli tullut. Koneet seisahtuivat, naiset


pukivat kiireellä päälleen ja lappautuivat ulos tehtaan rautaisesta
portista.

Anni oli saanut asunnon tehtaan lähettyviltä, joten ei muuta kuin


puikahtaa kadun kulmauksesta.

Eipä ollut ylellisyydellä pilattu, tämä pieni kamari


kellarikerroksessa. — Tutiseva pöytä, pahainen vuode ja pari
maalaamatonta tuolia muodosti sen kaluston. Uunin nurkassa seisoi
vielä ruokasäiliö — pystyyn käännetty tavaralaatikko, mutta sen
verhoksi oli levitetty puhdas, vanhasta esiliinasta ommeltu verho.
Pöytää kattoi valkea liina ja ikkunalaudalla oli kukkiva verenpisara.

Yhteisvoimin Vanjan kanssa oli tämä pieni koti pantu pystyyn, ja


se oli nyt kumminkin Annin oma.
Hän etsi esille ruokavaransa, kylmiä perunoita, suolaa ja vettä.
Maitokaupan edustalla oli niin suuri "jono", että hän katsoi
viisaimmaksi ensin syödä aamiaisen ja "jonottaa" loppuajan
saadakseen maitoa illaksi.

Hän taittoi kappaleen mureannäköistä leipää ja katseli palasta: —


Kuin murha-ase! Pitkät, terävät akanat ja kokonaisina jauhettujen
kaurojen kuoret törröttivät uhkaavina vastaan taitetusta syrjästä. O'at
silmissä suurenivat, nälkä katosi, mutta omituinen hiukaiseva tunne,
joka viime aikoina oli alkanut kalvaa sydänalaa, tuntui taas
ahdistavan.

— Olisi voita tuohon päälle, niin saattaisi sitä syödä — hän ajatteli,
mutta eihän hän ollut voita nähnytkään, sitte kun Vuorelasta lähti.
Koko syksynä ei ollut korttivoita jaettu muruakaan ja salakauppiasten
välityksellä se maksoi 16—18 mk. kilo, eihän Annin palkka sellaisiin
riittänyt.

Sillävälin oli maitokaupan edustalla odottajien luku vaan kasvanut.


Anni kävi siihen kumminkin, vaikka toivottomalle näytti seisominen
Jokaisella kadulla sateen virtanaan valuessa. Jono liikehti
lakkaamatta. Kukin koetti vartioivan miliisin silmän välttyessä päästä
hiukan naapuristaan edelle ja nuo vakinaiset jonottajat, pienet
poikaviikarit, joilla oli tällä alalla suuri taito ja kokemus, onnistuivat
vähitellen tunkeutumaan loppupäästä etumaisten joukkoon.
Varsinkin käyttivät he hyväkseen hetkeä, jolloin naapuri sattui
olemaan innokkaassa keskustelussa tai väittelyssä.

— Minulla on kuusi pientä lasta enkä neljään päivään ole saanut


niille pisaraakaan maitoa -kuuli Anni vieressään seisovan vaimon
lausuvan naapurilleen.

You might also like