ongkn commited on
Commit
d9b23b8
·
unverified ·
1 Parent(s): fdb506b

fix README and move repo from Codeberg to HF

Browse files
Files changed (3) hide show
  1. README.md +1 -2
  2. preprocess.cpp +240 -0
  3. preprocess.h +36 -0
README.md CHANGED
@@ -7,5 +7,4 @@ pipeline_tag: image-classification
7
  license: gpl-3.0
8
  ---
9
 
10
- ### This repo will host all iterations of models from our NekoDetector project.
11
- [Associated Codeberg repo](https://codeberg.org/Simtoon.Interactive.LLC/neko_classifier)
 
7
  license: gpl-3.0
8
  ---
9
 
10
+ ### This repo will host all iterations of models from our neko-classifier project.
 
preprocess.cpp ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include "preprocess.h"
2
+
3
+
4
+ void preprocessor::loadImg()
5
+ {
6
+ std::cout << "imread neko img\n";
7
+ for(auto& p : std::filesystem::directory_iterator("/home/simtoon/datasets/unprocessed/neko"))
8
+ {
9
+ cv::Mat img = cv::imread(p.path().string());
10
+ if(!img.empty())
11
+ {
12
+ preprocessor::animeNekoGirls.push_back(img);
13
+ }
14
+ }
15
+
16
+ std::cout << "imread non_neko img\n";
17
+ for(auto& p : std::filesystem::directory_iterator("/home/simtoon/datasets/unprocessed/non_neko"))
18
+ {
19
+ cv::Mat img = cv::imread(p.path().string());
20
+ if(!img.empty())
21
+ {
22
+ preprocessor::nonAnimeNekoGirls.push_back(img);
23
+ }
24
+ }
25
+ }
26
+
27
+ void preprocessor::resizeImg(int size)
28
+ {
29
+ std::cout << "resizing neko img\n";
30
+ cv::Size sizeObj(size, size); //need to construct an obj of class cv::Size with the int size arg for both width and height
31
+ for(auto& img : preprocessor::animeNekoGirls)
32
+ {
33
+ cv::resize(img, img, sizeObj);
34
+ }
35
+
36
+ std::cout << "resizing non_neko img\n";
37
+ for(auto& img : preprocessor::nonAnimeNekoGirls)
38
+ {
39
+ cv::resize(img, img, sizeObj);
40
+ }
41
+ }
42
+
43
+ void preprocessor::normalizeImg()
44
+ {
45
+ std::cout << "normalizing neko img\n";
46
+ for(auto& img : preprocessor::animeNekoGirls)
47
+ {
48
+ img /= 255.0;
49
+ }
50
+
51
+ std::cout << "normalizing non_neko img\n";
52
+ for(auto& img : preprocessor::nonAnimeNekoGirls)
53
+ {
54
+ img /= 255.0;
55
+ }
56
+ }
57
+
58
+ void preprocessor::convertToGrayscaleImg()
59
+ {
60
+ std::cout << "converting to grayscale neko img\n";
61
+ for(auto& img : preprocessor::animeNekoGirls)
62
+ {
63
+ cv::cvtColor(img, img, cv::COLOR_BGR2GRAY);
64
+ }
65
+
66
+ std::cout << "converting to grayscale non_neko img\n";
67
+ for(auto& img : preprocessor::nonAnimeNekoGirls)
68
+ {
69
+ cv::cvtColor(img, img, cv::COLOR_BGR2GRAY);
70
+ }
71
+ }
72
+
73
+ void preprocessor::blurImg(int blurType, int kerx, int kery)
74
+ {
75
+ if(blurType == 0)
76
+ {
77
+ std::cout << "blurring neko img\n";
78
+ for(auto& img : preprocessor::animeNekoGirls)
79
+ {
80
+ cv::GaussianBlur(img, img, cv::Size(kerx, kery), 0);
81
+ }
82
+
83
+ std::cout << "blurring non_neko img\n";
84
+ for(auto& img : preprocessor::nonAnimeNekoGirls)
85
+ {
86
+ cv::GaussianBlur(img, img, cv::Size(kerx, kery), 0);
87
+ }
88
+ }
89
+ }
90
+
91
+ void preprocessor::detectEdgesImg(int algType, int thr1, int thr2)
92
+ {
93
+ if(algType == 0)
94
+ {
95
+ std::cout << "applying canny to neko img\n";
96
+ for(auto& img : preprocessor::animeNekoGirls)
97
+ {
98
+ cv::Canny(img, img, thr1, thr2);
99
+ }
100
+
101
+ std::cout << "applying canny to non_neko img\n";
102
+ for(auto& img : preprocessor::nonAnimeNekoGirls)
103
+ {
104
+ cv::Canny(img, img, thr1, thr2);
105
+ }
106
+ }
107
+ }
108
+
109
+ void preprocessor::detectContours()
110
+ {
111
+ std::vector<std::vector<cv::Point>> conts;
112
+
113
+ std::cout << "applying thresholding and finding contours in neko img\n";
114
+ for(auto& img : preprocessor::animeNekoGirls)
115
+ {
116
+ cv::threshold(img, img, 125, 255, cv::THRESH_BINARY);
117
+ cv::findContours(img, conts, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
118
+ for(size_t i = 0; i < conts.size(); i++)
119
+ {
120
+ cv::drawContours(img, {conts}, i, cv::Scalar(255,0,0), 2);
121
+ }
122
+ }
123
+
124
+ std::cout << "applying thresholding and finding contours in non-neko img\n";
125
+ for(auto& img : preprocessor::nonAnimeNekoGirls)
126
+ {
127
+ cv::threshold(img, img, 80, 255, cv::THRESH_BINARY);
128
+ cv::findContours(img, conts, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
129
+ for(size_t i = 0; i < conts.size(); i++)
130
+ {
131
+ cv::drawContours(img, {conts}, i, cv::Scalar(255,0,0), 2);
132
+ }
133
+ }
134
+ }
135
+
136
+ void preprocessor::harrisImg()
137
+ {
138
+ std::cout << "applying harris to neko img\n";
139
+ for(auto& img : preprocessor::animeNekoGirls)
140
+ {
141
+ img.convertTo(img, CV_32F);
142
+ cv::cornerHarris(img, img, 2, 1, 0.1);
143
+ }
144
+
145
+ std::cout << "applying harris to non_neko img\n";
146
+ for(auto& img : preprocessor::nonAnimeNekoGirls)
147
+ {
148
+ img.convertTo(img, CV_32F);
149
+ cv::cornerHarris(img, img, 2, 5, 0.03);
150
+ }
151
+ }
152
+
153
+ void preprocessor::SIFTimg()
154
+ {
155
+ cv::Ptr<cv::SIFT> SIFTdetector = cv::SIFT::create();
156
+
157
+ for(auto& img : preprocessor::animeNekoGirls)
158
+ {
159
+ std::vector<cv::KeyPoint> kpoints;
160
+ SIFTdetector->detect(img, kpoints);
161
+ cv::Mat img_kpoints;
162
+ }
163
+ }
164
+
165
+ bool preprocessor::boolDetectHuman()
166
+ {
167
+ cv::HOGDescriptor hog;
168
+ hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
169
+ cv::Mat img = cv::imread("/home/simtoon/img.jpg");
170
+
171
+ std::vector<cv::Rect> ppl;
172
+ hog.detectMultiScale(img, ppl);
173
+
174
+ for (cv::Rect rect : ppl)
175
+ {
176
+ cv::rectangle(img, rect, cv::Scalar(0, 0, 255), 2);
177
+ }
178
+
179
+ if(ppl.empty())
180
+ {
181
+ return false;
182
+ }
183
+ else
184
+ {
185
+ return true;
186
+ cv::imshow("humanzz", img);
187
+ cv::waitKey();
188
+ }
189
+ return false;
190
+ }
191
+
192
+ void preprocessor::imwriteToDiskImg()
193
+ {
194
+ std::cout << "writing pre-processed neko img\n";
195
+ for(size_t i = 0; i < preprocessor::animeNekoGirls.size(); i++)
196
+ {
197
+ //preprocessor::animeNekoGirls[i].convertTo(preprocessor::animeNekoGirls[i], CV_16UC3, 255,255);
198
+ cv::imwrite("/home/simtoon/datasets/processed/neko/" + std::to_string(i) + ".jpeg", preprocessor::animeNekoGirls[i] /** 255*/);
199
+ }
200
+
201
+ std::cout << "writing pre-processed non_neko img\n";
202
+ for(size_t i = 0; i < preprocessor::nonAnimeNekoGirls.size(); i++)
203
+ {
204
+ //preprocessor::nonAnimeNekoGirls[i].convertTo(preprocessor::nonAnimeNekoGirls[i], CV_16UC3, 255,255);
205
+ cv::imwrite("/home/simtoon/datasets/processed/non_neko/" + std::to_string(i) + ".jpeg", preprocessor::nonAnimeNekoGirls[i] /** 255*/);
206
+ }
207
+ }
208
+
209
+
210
+ int main()
211
+ {
212
+ preprocessor Preprocessor;
213
+
214
+ Preprocessor.boolDetectHuman();
215
+
216
+ Preprocessor.loadImg();
217
+ Preprocessor.resizeImg();
218
+ //Preprocessor.normalizeImg(); fucked up, not calling until a fix is found
219
+ std::cout << "Press any key to proceed to the next step";
220
+ std::cin.ignore();
221
+ Preprocessor.convertToGrayscaleImg();
222
+ Preprocessor.imwriteToDiskImg();
223
+ std::cout << "Press any key to proceed to the next step";
224
+ std::cin.ignore();
225
+ Preprocessor.blurImg(0, 5, 5);
226
+ Preprocessor.imwriteToDiskImg();
227
+ std::cout << "Press any key to proceed to the next step";
228
+ std::cin.ignore();
229
+ //Preprocessor.detectContours();
230
+ //Preprocessor.imwriteToDiskImg();
231
+ //std::cout << "Press any key to proceed to the next step";
232
+ //std::cin.ignore();
233
+ //Preprocessor.detectEdgesImg(0, 200, 350);
234
+ // Preprocessor.harrisImg();
235
+ // Preprocessor.imwriteToDiskImg();
236
+ // std::cout << "Press any key to proceed to the next step";
237
+ // std::cin.ignore();
238
+ //Preprocessor.detectEdgesImg(0, 200, 300);
239
+ //Preprocessor.imwriteToDiskImg();
240
+ }
preprocess.h ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pragma once
2
+
3
+ #include <opencv2/core/hal/interface.h>
4
+ #include <opencv2/core/mat.hpp>
5
+ #include <opencv2/core/types.hpp>
6
+ #include <opencv2/imgcodecs.hpp>
7
+ #include <opencv2/imgproc.hpp>
8
+ #include <opencv2/features2d.hpp>
9
+ #include <opencv2/opencv.hpp>
10
+ #include <opencv2/highgui.hpp>
11
+ #include <opencv2/objdetect.hpp>
12
+ #include <cstddef>
13
+ #include <filesystem>
14
+ #include <iostream>
15
+ #include <string>
16
+ #include <vector>
17
+
18
+ class preprocessor
19
+ {
20
+ public:
21
+ // vars
22
+ std::vector<cv::Mat> animeNekoGirls;
23
+ std::vector<cv::Mat> nonAnimeNekoGirls;
24
+ // methods
25
+ void loadImg();
26
+ void resizeImg(int size=256); //to 256x256 atm
27
+ void normalizeImg(); //not doing norm anymore since the result is fucked up; no idea how to fix atm
28
+ void convertToGrayscaleImg(); //'cause no colors equals less computational resources required
29
+ void blurImg(int blurType, int kerx, int kery); //0 for gaussian, 1 for ...
30
+ void detectEdgesImg(int algType, int thr1, int thr2); //0 for canny, 1 for ...
31
+ void detectContours();
32
+ void harrisImg(); //apply the Harris detection algo to our two classes
33
+ void SIFTimg(); //I don't think this one will help us much
34
+ bool boolDetectHuman();
35
+ void imwriteToDiskImg();
36
+ };