|
| 1 | +use crate::backgrounds::BackgroundLoader; |
| 2 | +use crate::generator::coco::{BoundingBox, CocoCategoryInfo, CocoGenerator}; |
| 3 | +use crate::generator::config::TargetGeneratorConfig; |
| 4 | +use crate::objects::ObjectManager; |
| 5 | +use error::GenerationError; |
| 6 | +use image::codecs::png::{CompressionType, PngEncoder}; |
| 7 | +use image::imageops::FilterType; |
| 8 | +use image::{DynamicImage, ExtendedColorType, ImageEncoder, Rgba, RgbaImage}; |
| 9 | +use log::{debug, trace, LevelFilter}; |
| 10 | +use moka::sync::{Cache, CacheBuilder}; |
| 11 | +use rand::{thread_rng, Rng}; |
1 | 12 | use rayon::iter::ParallelIterator; |
| 13 | +use rayon::iter::IntoParallelIterator; |
| 14 | +use simple_logger::SimpleLogger; |
2 | 15 | use std::ops::RangeTo; |
3 | 16 | use std::path::{Path, PathBuf}; |
4 | 17 | use std::sync::{Arc, Mutex}; |
5 | 18 | use std::time::Instant; |
6 | | -use image::{DynamicImage, ExtendedColorType, ImageEncoder, Rgba, RgbaImage}; |
7 | | -use image::codecs::png::{CompressionType, PngEncoder}; |
8 | | -use image::imageops::FilterType; |
9 | | -use log::{debug, trace, LevelFilter}; |
10 | | -use rand::{thread_rng, Rng}; |
11 | | -use error::GenerationError; |
12 | 19 | use util::STANDARD_PPM; |
13 | | -use crate::backgrounds::BackgroundLoader; |
14 | | -use crate::generator::coco::{BoundingBox, CocoCategoryInfo, CocoGenerator}; |
15 | | -use crate::generator::config::TargetGeneratorConfig; |
16 | | -use crate::objects::{ObjectManager}; |
17 | | -use moka::sync::{Cache, CacheBuilder}; |
18 | | -use rayon::iter::{IntoParallelIterator}; |
19 | | -use simple_logger::SimpleLogger; |
20 | 20 |
|
21 | 21 | pub mod coco; |
22 | 22 | pub mod error; |
@@ -98,7 +98,18 @@ impl TargetGenerator { |
98 | 98 | self.resized_cache.insert(format!("{}x{}_{}", obj_w, obj_h, obj.object_class), resized.clone()); |
99 | 99 | resized |
100 | 100 | }; |
| 101 | + |
| 102 | + let resized = if self.config.do_random_rotation { |
| 103 | + let angle = thread_rng().gen_range(0.0..720.0); // random rotation including upside down |
| 104 | + // let rotated = util::rotate_image(&resized, angle); |
| 105 | + let rotated = util::rotate_90s(&resized, angle); |
| 106 | + rotated |
| 107 | + } else { |
| 108 | + resized // return as is if random rotation is not performed |
| 109 | + }; |
101 | 110 |
|
| 111 | + let (obj_w, obj_h) = (resized.width(), resized.height()); |
| 112 | + |
102 | 113 | image::imageops::overlay(&mut image, &resized, x as i64, y as i64); |
103 | 114 |
|
104 | 115 | if self.config.visualize_bboxes { |
@@ -208,7 +219,7 @@ pub fn test_generate_target() { |
208 | 219 | #[test] |
209 | 220 | #[ignore] |
210 | 221 | pub fn test_generate_targets() { |
211 | | - SimpleLogger::new().init().unwrap(); |
| 222 | + SimpleLogger::new().with_level(LevelFilter::Debug).init().unwrap(); |
212 | 223 |
|
213 | 224 | let mut tg = TargetGenerator::new("output", "backgrounds", "objects", "output/annotations.json").unwrap(); |
214 | 225 | tg.config.permit_duplicates = true; |
|
0 commit comments