summaryrefslogtreecommitdiff
path: root/python/openvino/runtime/common/format_reader/MnistUbyte.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'python/openvino/runtime/common/format_reader/MnistUbyte.cpp')
-rw-r--r--python/openvino/runtime/common/format_reader/MnistUbyte.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/python/openvino/runtime/common/format_reader/MnistUbyte.cpp b/python/openvino/runtime/common/format_reader/MnistUbyte.cpp
new file mode 100644
index 0000000..182ef99
--- /dev/null
+++ b/python/openvino/runtime/common/format_reader/MnistUbyte.cpp
@@ -0,0 +1,66 @@
+// Copyright (C) 2018-2022 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+// clang-format off
+#include <fstream>
+#include <iostream>
+#include <string>
+
+#include "MnistUbyte.h"
+// clang-format on
+
+using namespace FormatReader;
+
+int MnistUbyte::reverseInt(int i) {
+ unsigned char ch1, ch2, ch3, ch4;
+ ch1 = (unsigned char)(i & 255);
+ ch2 = (unsigned char)((i >> 8) & 255);
+ ch3 = (unsigned char)((i >> 16) & 255);
+ ch4 = (unsigned char)((i >> 24) & 255);
+ return (static_cast<int>(ch1) << 24) + (static_cast<int>(ch2) << 16) + (static_cast<int>(ch3) << 8) + ch4;
+}
+
+MnistUbyte::MnistUbyte(const std::string& filename) {
+ std::ifstream file(filename, std::ios::binary);
+ if (!file.is_open()) {
+ return;
+ }
+ int magic_number = 0;
+ int number_of_images = 0;
+ int n_rows = 0;
+ int n_cols = 0;
+ file.read(reinterpret_cast<char*>(&magic_number), sizeof(magic_number));
+ magic_number = reverseInt(magic_number);
+ if (magic_number != 2051) {
+ return;
+ }
+ file.read(reinterpret_cast<char*>(&number_of_images), sizeof(number_of_images));
+ number_of_images = reverseInt(number_of_images);
+ file.read(reinterpret_cast<char*>(&n_rows), sizeof(n_rows));
+ n_rows = reverseInt(n_rows);
+ _height = (size_t)n_rows;
+ file.read(reinterpret_cast<char*>(&n_cols), sizeof(n_cols));
+ n_cols = reverseInt(n_cols);
+ _width = (size_t)n_cols;
+ if (number_of_images > 1) {
+ std::cout << "[MNIST] Warning: number_of_images in mnist file equals " << number_of_images
+ << ". Only a first image will be read." << std::endl;
+ }
+
+ size_t size = _width * _height * 1;
+
+ _data.reset(new unsigned char[size], std::default_delete<unsigned char[]>());
+ size_t count = 0;
+ if (0 < number_of_images) {
+ for (int r = 0; r < n_rows; ++r) {
+ for (int c = 0; c < n_cols; ++c) {
+ unsigned char temp = 0;
+ file.read(reinterpret_cast<char*>(&temp), sizeof(temp));
+ _data.get()[count++] = temp;
+ }
+ }
+ }
+
+ file.close();
+}