Download ebooks file Practical Machine Learning and Image Processing: For Facial Recognition, Object Detection, and Pattern Recognition Using Python Himanshu Singh all chapters
Download ebooks file Practical Machine Learning and Image Processing: For Facial Recognition, Object Detection, and Pattern Recognition Using Python Himanshu Singh all chapters
com
https://textbookfull.com/product/practical-machine-learning-
and-image-processing-for-facial-recognition-object-
detection-and-pattern-recognition-using-python-himanshu-
singh/
OR CLICK BUTTON
DOWNLOAD NOW
https://textbookfull.com/product/computer-vision-pattern-recognition-
image-processing-and-graphics-renu-rameshan/
textboxfull.com
https://textbookfull.com/product/image-processing-computer-vision-and-
pattern-recognition-hamid-r-arabnia/
textboxfull.com
https://textbookfull.com/product/biota-grow-2c-gather-2c-cook-loucas/
textboxfull.com
Image Processing and Pattern Recognition Based on Parallel
Shift Technology First Edition Bilan
https://textbookfull.com/product/image-processing-and-pattern-
recognition-based-on-parallel-shift-technology-first-edition-bilan/
textboxfull.com
Himanshu Singh
Practical Machine Learning and Image Processing
Himanshu Singh
Allahabad, Uttar Pradesh, India
iii
Table of Contents
iv
Table of Contents
v
Table of Contents
vi
Table of Contents
Sobel Transformation����������������������������������������������������������������������������������������157
Haar Cascade����������������������������������������������������������������������������������������������������158
LBPH Face Recognition�������������������������������������������������������������������������������������158
Image Moments������������������������������������������������������������������������������������������������158
Image Contours�������������������������������������������������������������������������������������������������159
Chessboard Corners Function���������������������������������������������������������������������������160
Calibrate Camera Function��������������������������������������������������������������������������������161
Perspective Transformation Function���������������������������������������������������������������162
Index�������������������������������������������������������������������������������������������������165
vii
About the Author
Himanshu Singh has more than 6+ years of
experience as a data science professional.
Currently, he is a senior data scientist at
V-Soft Labs. He provides corporate training
on data science, machine learning, and deep
learning. He is also a visiting faculty member
in analytics at the Narsee Monjee Institute of
Management Studies, considered one of the
premium management institutes in India. He is founder of Black Feathers
Analytics and Rise of Literati Clubs.
ix
About the Technical Reviewer
Santanu Pattanayak currently works at GE,
Digital, as a staff data scientist and is author
of Pro Deep Learning with TensorFlow: A
Mathematical Approach to Advanced Artificial
Intelligence in Python. He has approximately
12 years of overall work experience, with eight
of years of experience in the data analytics/
data science field, and also has a background
in development and database technologies.
Before joining GE, Santanu worked in
companies such as RBS, Capgemini, and
IBM. He graduated with a degree in electrical
engineering from Jadavpur University, Kolkata,
and is an avid math enthusiast. Santanu is currently pursuing a master’s
degree in data science from the Indian Institute of Technology, Hyderabad.
He also devotes his time to data science hackathons and Kaggle
competitions in which he ranks within the top 500 worldwide. Santanu
was born and brought up in West Bengal, India, and currently resides in
Bangalore, India, with his wife.
xi
Acknowledgments
First of all, I thank the Apress Team, Celestian John and Aditee Mirashi, for
giving me a platform to contribute my image processing knowledge and
share it with readers. Second, I thank my colleagues, without whom this
book would not have been possible: Aravind Kota, Yamuna, and my boss
and mentor, Yunis Ahmad Lone. I also thank my students. They helped
me see which issues are challenging for them, and enabled me to devise
a specific means of explaining the concepts to them in a manner that
facilitates their learning.
Last, but not the least, I thank my wife, Shikha Singh. Her constant
support and help has allowed this project to come to fruition. She assisted
me in all aspects of writing this book, sometimes proofreading and writing
technical details herself.
Many thanks to everyone for your constant support.
xiii
Introduction
Practical Machine Learning and Image Processing gives readers deep
insight into the basics of image processing and various image processing
methodologies and algorithms, applications using various Python
libraries, and real-time use case implementation using machine learning
approaches.
The book begins with a discussion of the setup environment for
different operating systems, presents basic image processing terminology,
and explores useful Python concepts for algorithm application. It
then delves into various image processing algorithms and practical
implementation of them in Python using two libraries: Scikit Image and
OpenCV. Next, advanced machine learning and deep learning methods
are presented for image processing and classification. Concepts such as
Adaboost, XG Boost, convolutional neural networks, and more, for image-
specific applications are explained. Later, the process for making models in
real time and then deploying them is described.
All the concepts in the book are explained using real-life scenarios.
By the end of the book, readers should be able to apply image processing
techniques and make machine learning models for customized
applications.
xv
CHAPTER 1
Setup Environment
In this chapter we prepare our system to run the code included in this
book. Let’s look at how to install the following:
• Anaconda
• OpenCV
• Keras
Aside from the last two packages in the list, most of what we need
comes preinstalled with Anaconda. Let’s start with Anaconda, then follow
with OpenCV and Keras.
I nstall Anaconda
The Anaconda installation page proclaims it is “The Most Popular Python
Data Science Platform.” Using Anaconda, installing supporting software,
setting up virtual environments, and so on, are all quite easy, and the
package comes with one of the best integrated development environments
(IDEs) for Python data science: Jupyter Notebook. Jupyter not only helps
you write Python code, but also it makes your code look beautiful and
presentable. So, let’s get started with the Anaconda installation.
W
indows
If you are using Windows, here’s the process:
1. Go to www.anaconda.com.
2
Chapter 1 Setup Environment
3
Chapter 1 Setup Environment
m
acOS
If you are using macOS, here is the Anaconda installation process:
U
buntu
The process for downloading Anaconda in Ubuntu is as follows:
I nstall OpenCV
Now that we have installed Anaconda and Jupyter Notebook. The next
thing to do is to install its supporting software. For OpenCV, do the
following:
4
Chapter 1 Setup Environment
Install Keras
To install Keras, follow these procedures:
5
Chapter 1 Setup Environment
Virtual Environments
Now that we have installed the software we need, let’s take a look at virtual
environments. Virtual environments are very important when you want
to develop multiple projects. What should we do if we are developing
a product using Python 3, but we want to create another project using
Python 2.7? If we do it directly, we may encounter problems because
different versions of Python are installed. Or, we could create a virtual
environment, install Python 2.7, and develop the product inside that
environment. Regardless of what you develop inside a virtual environment,
it never influences any code outside the environment. Let’s see how we
can create a virtual environment:
1. Type conda create -n environment_name
python=version anaconda. In place of
environment_name, type any name you wish to give
to your environment. In place of version, type any
version of Python that you wish to use (for example,
2.7, 3.5, 3.6, and so on).
2. Now that we have created the environment, we have
to activate it. We do this by typing source activate
environment_name.
3. We can now open Jupyter Notebook and start
working in this environment.
4. To deactivate the environment, type source deactivate.
6
CHAPTER 2
Introduction to Image
Processing
In this chapter we examine exactly what an image is, and its related
properties. By the end of the chapter, you should have an understanding of
the following concepts:
• Images
• Pixels
• Image resolution
• Bitmap images
• Lossless compression and lossy compression
I mages
Visual representation of a real-life object (a person or any other object)
in a two-dimensional form is called an image. An image is nothing but a
collection of pixels in different color spaces. Figure 2-1 is an example of a
normal image.
P
ixels
You might think of a complete image as a set that consists of small
samples. These samples are called pixels. They are the smallest elements in
any digital image. Have you ever zoomed in on an image to such an extent
that you see small squares? Those are pixels. So, pixels are subsamples of
an image that, when get combined, give us the complete image. Figure 2-2
shows how pixels, with various colors, may look.
8
Chapter 2 Introduction to Image Processing
I mage Resolution
Image resolution is the number of pixels present in an image. The greater
the number of pixels, the better quality. Image resolutions are described,
for example, as 320 × 240, 640 × 480, 800 × 600, 1024 × 768, and so on.
This means, for example, that there are 1024 pixel columns and 768 pixel
rows. The total number of pixels is obtained by multiplying both numbers,
which gives us 786,432 pixels. Figure 2-3 shows comparative depictions of
different image resolutions.
1920x1080
1280x720
640x480
9
Chapter 2 Introduction to Image Processing
P
PI and DPI
As noted at the beginning of the chapter, PPI means “pixels per inch”
whereas DPI means “dots per inch.” They are the units for measuring
image resolution.
If we consider an inch of an image, the number of square pixels we are
able to see inside it is represented by PPI. DPI, on the other hand, is related
to printing. When we print an image and look at an inch of the print, the
number of dots of ink used is represented by DPI.
As shown in Figure 2-4, PPI looks more smooth whereas DPI is crispier.
B
itmap Images
In general, when we look at pixel values, they are a range of integers. But,
when we convert the range of integers into bytes, we then have a bitmap
image.
One kind of bitmap is a binary image in which each pixel has one of
two numbers: either a zero or a one. They represent black or white and are
often used for storing images efficiently. Figure 2-5 shows a binary bitmap
image.
10
Chapter 2 Introduction to Image Processing
Lossless Compression
When we want to reduce the size of a file (which can be an image), but
we don’t want to compromise quality, this kind of compression is called
a lossless compression. The compressed file can be saved, but when we
require it, during the decompression process, all the information is restored
and we get the actual image (Figure 2-6). This first type of compression
gives priority to the information contained in the file—especially when
compressing text, where we cannot afford to lose even a single piece of
information.
11
Chapter 2 Introduction to Image Processing
L ossy Compression
With lossy compression, on the other hand, some of the data may be lost.
Lossy compression prioritizes saving space, rather than the accuracy of
the retrieved file. Some files, such as those that contain music or images,
can be trimmed and still be unaffected by the compression. There may be
some loss, but it isn’t worrisome (Figure 2-7).
Partially
Original Compressed
Restored
• BMP: Bitmap
12
Chapter 2 Introduction to Image Processing
Color Spaces
The organization of the colors of in an image in a specific format is called
color space. The way in which a color is represented is called a color model.
Each and every image uses one of the following color spaces for effective
picture representation:
13
Chapter 2 Introduction to Image Processing
RGB
Using the RGB color space, red, green, and blue are mixed in different ways
to make different color combinations. Why do we use RGB? Because our
eyes have color receptors that can perceive these three colors and their
combinations quite effectively.
We can form any color, theoretically, from these three colors. Each
color’s intensity is defined within a range of 0 to 255. This range is called
color depth.
RGB color space has two more components :
14
Chapter 2 Introduction to Image Processing
X
YZ
RGB colors have a threshold of saturation. They cannot go beyond what
we can see. The XYZ color space helps us go beyond this threshold. Now,
you may wonder why we would want to go beyond the threshold. Well,
it may not be possible for our human eyes to perceive certain colors, but
in the digital world, you may need these colors to be used. For example,
XYZ can be used for color matching; we can enter a color code and then
reproduce later it in different application, such as printing. Using XYZ, we
can encode all the colors that exist in the real world. This color space is
called XYZ because it extrapolates RGB colors in three dimensions: x, y,
and z. Figure 2-9 presents an XYZ representation of an image.
15
Chapter 2 Introduction to Image Processing
16
Chapter 2 Introduction to Image Processing
H
SV/HSL
HSV/HSL is an alternative representation of the RGB color space. It
consists of the following components:
• Hue
• Saturation
• Value
• Lightness
Hue is a property that describes three colors: green, red, and magenta. It
can also be a mixture of two pure colors: red and yellow, and yellow and green
Saturation measures the intensity of an image. It tells us how far a color
is from gray. A lower value means the color is approaching gray.
Lightness refers to the intensity of color with respect to white. It tells us
how far a color is from white.
Value is another measure of intensity. It tells us how far a color is from
black. Figure 2-10 shows an HSV representation of an image
17
Exploring the Variety of Random
Documents with Different Content
Payments to lay officials, such as stewards, bailiffs, rent-
collectors, and auditors, appear in Valor Ecclesiasticus as follows:
Brewood Nunnery (4), nil; Burton-on-Trent, £28; Croxden (13), £7;
Dieulacres (13), £5 6s. 8d.; Dudley, £2 6s. 8d.; Hulton, £6; Rocester
(9), £2 13s. 4d.; Ronton, £4 6s. 8d.; St. Thomas’s (7), £11 13s. 4d.;
Stone, £3 6s. 8d.; Trentham, £5; Tutbury (9), £18 13s. 4d.: Total, £94
6s. 8d. The figures in brackets show the number of religious, where
these can be ascertained. At Dudley and Trentham these must have
been very few, yet at the latter the expenditure on administration was
£5. Tutbury also spent large sums on management. On the other
hand, Rocester, with nine canons and two stewards, and a small
expenditure on management, appears in a favourable light. The
canons at Rocester were on good terms with their neighbours, and
the house was almost unique among the smaller houses in
Staffordshire in the matter of charity. The general impression of the
canons of Rocester is that they were living quiet, simple lives,
working hard themselves, and held in respect.
The Nunnery at Brewood[197] possessed a hall, parlour, kitchen,
buttery, and larder, with a large bedroom (in which they all slept on
two bedsteads) and a bailiff’s chamber. Of outhouses there were
brewhouse and cooling house, bolting house for kneading bread,
cheeseloft, and a “kylhouse,” all of which were more or less
adequately furnished. There were hangings of painted cloth in the
parlour. In the hall there were two tables but only one form. The
nuns’ bedroom contained a feather bed and one tester of white linen
cloth, two coverlets and a blanket described as old, one bolster, two
pillows and four pairs of sheets. The bailiff slept on a mattress on the
floor, with a coverlet and blanket. His axe remained in his bedroom
when the house was sold. A table-cloth and two latten candlesticks,
a bushel and a half of salt, four pewter porringers, four platters, and
two saucers, which are mentioned, also throw light on the standard
of living. Of grain they had a quarter of wheat (6s. 2d.), a quarter of
“munke-corne” (8s.), a quarter of oats (1s. 8d.), and a quarter of
peas (2s. 8d.). The bread they made was of good quality: rye is not
even mentioned. Their one horse was sold for 4s., the wain and
dung-cart for 16d. They had ten loads of hay (15s.).
With this we may compare the abbey and out-buildings at
Dieulacres.[198] In the cloister was a lavatory. No beds or bedding
are mentioned in the dorter or dormitory, which the monks had
forsaken for more comfortable quarters in smaller bedrooms, of
which there were several. The corner chamber was luxuriously
provided with a mattress, feather bed, bolster, and two pillows, a
blanket and coverlet, a tester of “dorney,” a hanging of sey (silk), etc.
In the inner chamber also was a mattress. In the ryder’s chamber
were two bedsteads, a hanging of painted cloth, etc. In the butler’s
chamber were a mattress and feather bed and four coverlets, a
bolster and two pillows. In the buttery were five napkins, three
pewter salts, eight hogsheads, six candlesticks, etc.; in the larder, a
salting vat; in the kitchen, five great brass pots, four small pans, a
cauldron, three spits, a frying pan, a gridiron, thirty-eight plates,
dishes, and saucers, a grater, two chafing dishes, a brass “skimmer,”
etc. There was a brewhouse, bolting-house and labourers’ chamber
(with two mattresses and two coverlets).
Their live stock consisted of six oxen (sold for £4 5s.), sixty ewes
and lambs (£3 6s. 8d.), three horses (£1), and twelve swine (13s.
4d.). Of grain they had 159 bushels of oats (£11 19s.), and rye worth
£1 1s., with twenty-nine loads of hay which sold for £3.
At St. Thomas’s, Stafford,[199] the seven religious and twenty-
nine “servants” had stores as follows:
Wheat. Rye and Munke-corn. Barley. Peas. Hay.
Arberton Grange 3 qrs. 11 qrs. 40 qrs. 10 qrs. 20 loads
Berkswick Grange 12 „ 4 „
St. Thomas’s Priory 12 „
There were also the following farm implements and horses:
Waggons. Harrows. Ploughs. Cart. Cart Horses. Mares.
Arberton Grange 2 2 1 3 2
Berkswick Grange 2 2 2
Some of the waggons were “ironbound” and some “unbound,”
and all, with the ploughs and harrows, and the cart, appear to have
been complete “with yokes and teams to them belonging.”
The live stock was as follows:
Oxen. Cows. Calves. Wethers. Ewes. Lambs. Swine. Winter
Beasts.
Arberton Grange 12 9 8 60 70 6 6
Berkswick 12 80 9
Grange
In the house the dormitory had “cells” or cubicles, but the
absence of beds and bedding there indicates that more comfortable
quarters were occupied. The court had a conduit for the supply of
water. The Prior’s parlour was hung with linen, and had a folding or
trestle table, two forms and four chairs. There were six bedrooms
furnished as follows: the water chamber had bedsteads with painted
hangings, two feather beds, two bolsters, two pillows and four
coverlets. The great chamber had a bedstead with a feather bed, a
coverlet, two fustian blankets and a bolster. The two “inner
chambers” had a bedstead each, furnished with a bolster apiece and
four old coverlets between them. The chamber over the chapel had a
bedstead with feather bed, coverlet, a pair of blankets and sheets,
and a cupboard, form, chair and hangings of linen cloth. The carter’s
chamber had a bedstead with a mattress, a pair of sheets and three
old coverlets.
In the buttery were napkins and cloths, a washing towel, tubs,
two pewter salts, two costrells or wine jugs; in the kitchen, four brass
pots, a broche or spit, two brass pans, a brass mortar, two
cupboards, a mustard quern, a kemnell or tub, a skimmer, a flesh
hook and two pairs of pothooks, seven platters, a voider or basket
for clearing away the relics of meals, three dishes, four saucers, four
porringers, etc. The brewhouse and bakehouse was well furnished
with leads, vats, pans, etc., and attached to it was a bedroom, which
Richard Torner doubtless occupied, and which was well supplied
with bed and bedding. St. Thomas’s Priory was well and comfortably
furnished, and the standard of comfort there was considerably higher
than at either of the other smaller Staffordshire houses of which we
have details.
In the houses of the friars[200] there were few signs of anything
approaching domestic comfort. The kitchens had various necessary
utensils, more, apparently, than the communities would require for
their own cooking, and pointing probably to considerable
dispensation of charity and poor relief. There was a considerable
amount of church furniture—vestments, candlesticks, etc.,—but
practically nothing at all in the way of bedding or linen.
The records by no means show that the religious, either monks,
nuns, or friars, were living a life more luxurious than the generality of
people. If we are to take the prices at which their live stock was sold
it must have been of inferior breed. The sales being “compulsory”
tended to lower the prices realized, but the monks had, in all
probability, sold as much as they could and dared as the imminence
of dissolution became more threatening, and of course their better
animals would find the readiest sale. As regards the furniture of the
houses, the inventories of the sales may well be compared with
other contemporary lists of a similar nature, such as the “Inventory of
the Goods and Catales of Richd. Master, Clerk, Parson of Aldington”
[Kent], in 1534, which is given by Froude.[201] If Dieulacres really
had only sixty sheep in the sixteenth century it had sadly declined
from its earlier wealth in that branch of industry, and there was little
occupation for the servants. But, probably, as we have said, the
number represents the remainder which had not been sold. All sales
so made were by law ipso facto void if they became known, so that
no extraordinary number could have been parted with. The inference
therefore is that their sheep-farming had declined, and the monks of
Dieulacres, at any rate, had not taken the part in the conversion of
arable into pasture of which the monasteries have often been
accused. Ronton Priory had enclosed all its demesne, but there is no
evidence that it was for the purpose of forming large sheep-runs—it
may have been merely in order to facilitate “convertible
husbandry”—a very different matter.
As we have already pointed out, none of the graver charges
which were alleged against many of the religious at the time of the
Dissolution, and have been so generally magnified since, were even
hinted at in connection with Staffordshire. On the other hand, there
are many signs that they were respected by their neighbours. Indeed
the only definite fault which could be found with them was an
occasional charge of insolvency, and even that is sometimes so
vague as to be practically worthless. Bishop Ingworth enlarged upon
the bankrupt condition of the friars. The house at Lichfield was “more
in debt than all the stuff that belongs to it will pay, by twenty nobles.”
The house at Newcastle-under-Lyme, he says, had mortgaged all its
substances and was bankrupt, with its buildings in a ruinous
condition. The Grey Friars at Stafford owed £4. Dieulacres was £171
10s. 5d. in debt, and St. Thomas’s Priory, Stafford, £235 19s. 7d.
Fortunately we have details of some of these debts, so that it is
possible to see how they had been incurred. The Lichfield friars
owed thirty shillings which had been raised on loan for building
purposes, and twenty shillings to the Bishop for five years’ rent; the
rest of the debt was for malt and rye. At Dieulacres and St. Thomas’s
Priory[202] the items of indebtedness appear to be usually fees to
various officials, such as the Bishop, the Dean and Chapter, and the
Archdeacon, wages to stewards and bailiffs, stipends to vicars, and
tradesmen’s small bills. Among them there is only one other instance
of borrowing, besides that already mentioned at Lichfield, though St.
Thomas’s Priory had raised £43 by mortgaging some of its plate,
including a silver censer and a cross of silver plate.
The total amount of indebtedness, as well as the nature of the
debts, hardly bears out the charge of general insolvency which has
been brought against the religious houses.
No doubt their days of undimmed prosperity had passed.
Economic changes had pressed hard on all landlords, and recent
religious movements had seriously affected all forms of charity. The
friars in particular must have felt the effects of the latter, and their
buildings had evidently fallen steadily into disrepair. Yet even they
can hardly be said with justice to have been hopelessly insolvent.
They had assets of considerable value:[203] those which were sold at
Stafford amounted to £32 6s. 4d. at the Austin Friars (besides 13 oz.
of plate and bells worth £8 8s.), and £34 3s. 10d. at the Grey Friars
(besides 16 oz. of plate, £45 worth of lead, and bells worth £10. The
sale of the effects at the Grey Friars’ house at Lichfield produced
£68 15s. The small debt of the Grey Friars at Stafford was
discharged by the sale of timber and growing corn.
The indebtedness of the “monasteries” is in all probability to be
accounted for, to no small extent, by the very large sums which most
of them had been recently called upon to pay under the pretence
that they were to be allowed to continue. The amount seems to have
been roughly calculated at a year’s net income, as will be seen from
the following table. The first column of figures gives the net income
of the house as returned in Valor Ecclesiasticus (1535), and the
second the fine paid for being allowed to continue (1536–7).
Net Income. Fine.
£ s. d. £ s. d.
Croxden Abbey 90 5 11 100 0 0
Hulton Abbey 76 14 0 66 13 4
Rocester Priory 100 2 10½ 100 0 0
St. Thomas’s, Stafford 141 13 2¼ 133 6 8
To enable themselves to pay such very large sums in ready
money the monks would have to leave many small creditors unpaid
for a time. The fact that they were able to do this is of itself sufficient
to show that in the popular estimation they were considered
thoroughly solvent. They had abundance of assets, as is shown by
the amounts raised at the sales of the furniture, etc., at the
Suppression. Dieulacres (which had not been called upon to pay a
fine for continuance), proved to have lead alone worth £720, besides
117 oz. of plate, and bells worth £37 10s. The actual goods sold
produced £63 14s. 10d., and would have doubtless realized a much
higher sum if they had been disposed of under other conditions.
Besides, the net income of the Abbey was returned in Valor
Ecclesiasticus as £227 5s., so that a debt of £171 10s. 5d. cannot be
considered, under the circumstances, entirely unreasonable.
The financial condition of St. Thomas’s Priory, the other house
which we are told was heavily in debt, was rather worse than that of
Dieulacres, but it had recently paid the heavy fine of £133 6s. 8d. It
owed £235 19s. 7d., in addition to the mortgage of £43 6s. 8d.,
which was covered by the plate mentioned. Yet even this large sum
is not much more than half as much again as a year’s net income;
and if, as we have surmised, it had been partially incurred by the
payment of the Fine for Continuance, it was considerably less. At the
sale of the effects of the Priory, £87 9s. 6d. was realized, besides
£40 worth of lead, bells worth £54, plate, etc. Here, again, we cannot
fairly say that the position was one of hopeless bankruptcy.
The allegation of insolvency against the houses appears,
therefore, to have little basis in fact. The monks had felt the adverse
effects of recent tendencies, both economic and religious, and their
finances had quite recently been subjected to a severe and
exceptional strain. But in spite of this they appear to have been in a
fairly sound financial position. Their normal debts represent only the
casual credit of ordinary life. Their alleged insolvency was merely
temporary and mainly fictitious. In the ordinary course of events it
would have been discharged in due course.
CHAPTER IX
LOSS AND GAIN
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
textbookfull.com