Skip to content

Object recognition: apply *h5 cnn model to find an specific handwritten digit #17

@Leprechault

Description

@Leprechault

I don't find any material about object detection using *h5 cnn adjusted model.
I try to create a simple example because I don't find in any book/web, I've like to apply any object detection technique to find handwritten digits in an image with several digits (wh_img). First, a create a CNN using the classic MNIST example:

Preparing the Data - using MNIST dataset is included with Kera

library(keras)
mnist <- dataset_mnist()
x_train <- mnist$train$x
y_train <- mnist$train$y
x_test <- mnist$test$x
y_test <- mnist$test$y

#reshape
x_train <- array_reshape(x_train, c(nrow(x_train), 784))
x_test <- array_reshape(x_test, c(nrow(x_test), 784))
#rescale
x_train <- x_train / 255
x_test <- x_test / 255

y_train <- to_categorical(y_train, 10)
y_test <- to_categorical(y_test, 10)

CNN model

model <- keras_model_sequential()
model %>%
layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>%
layer_dropout(rate = 0.4) %>%
layer_dense(units = 128, activation = 'relu') %>%
layer_dropout(rate = 0.3) %>%
layer_dense(units = 10, activation = 'softmax')

model %>% compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_rmsprop(),
metrics = c('accuracy')
)

#Training and Evaluation
history <- model %>% fit(
x_train, y_train,
epochs = 30, batch_size = 128,
validation_split = 0.2
)
plot(history)

Save the model

model %>% save_model_hdf5("cnn_digits.h5")

Now, I've to apply any object detection technique in my y.png image with several handwritten digits to find only 4 numerals using my trained model :

Open an image with handwrite numbers collections

y = "http://mariakravtsova.us/img/numbers.png"
download.file(y,'y.png', mode = 'wb')
library("png")
wh_img <- readPNG("y.png")
plot.new()
rasterImage(wh_img,0,0,1,1)

library(image.darknet)

Try to use *h5 model to object detection only 4 handwritten digits

yolo_digits <- image_darknet_model(type = ‘detect’, labels ="4", model = "cnn_digits.h5")

x <- image_darknet_detect(file = "/Documents/numbers.png",
object = yolo_digits,
threshold = 0.4)

This is possible in R? Because in Python there are a lot of functions, choose the window size, etc. but in R not :(

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions