update for shared state and improved performance

This commit is contained in:
Henry Schimke
2023-01-02 16:38:05 -06:00
parent 72f69dd6a0
commit 65f7c4d01b
46 changed files with 505 additions and 359 deletions

View File

@@ -24,16 +24,15 @@
* http://www.piramidepse.com/
*/
use std::rc::Rc;
use std::{cell::RefCell, rc::Rc};
/**
* @author Pablo Orduña, University of Deusto (pablo.orduna@deusto.es)
* @author Eduardo Castillejo, University of Deusto (eduardo.castillejo@deusto.es)
*/
use crate::{
common::{BitArray, GlobalHistogramBinarizer},
oned::rss::expanded::RSSExpandedReader,
BinaryBitmap, BufferedImageLuminanceSource,
common::GlobalHistogramBinarizer, oned::rss::expanded::RSSExpandedReader, BinaryBitmap,
BufferedImageLuminanceSource,
};
use super::bit_array_builder;
@@ -175,13 +174,11 @@ fn assertCorrectImage2binary(fileName: &str, expected: &str) {
let path = format!("test_resources/blackbox/rssexpanded-1/{}", fileName);
let image = image::open(path).expect("file exists");
let binaryMap = BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(
BufferedImageLuminanceSource::new(image),
let mut binaryMap = BinaryBitmap::new(Rc::new(RefCell::new(GlobalHistogramBinarizer::new(
Box::new(BufferedImageLuminanceSource::new(image)),
))));
let rowNumber = binaryMap.getHeight() / 2;
let row = binaryMap
.getBlackRow(rowNumber, &mut BitArray::new())
.expect("row");
let row = binaryMap.getBlackRow(rowNumber).expect("row");
// let pairs = Vec::new();
// try {

View File

@@ -29,11 +29,11 @@
*
*/
use std::{collections::HashMap, rc::Rc};
use std::{cell::RefCell, collections::HashMap, rc::Rc};
use crate::{
client::result::{ExpandedProductParsedRXingResult, ParsedClientResult},
common::{BitArray, GlobalHistogramBinarizer},
common::GlobalHistogramBinarizer,
oned::{rss::expanded::RSSExpandedReader, OneDReader},
BarcodeFormat, BinaryBitmap, BufferedImageLuminanceSource,
};
@@ -71,13 +71,11 @@ fn assertCorrectImage2result(fileName: &str, expected: ExpandedProductParsedRXin
let path = format!("test_resources/blackbox/rssexpanded-1/{}", fileName);
let image = image::open(path).expect("image must exist");
let binaryMap = BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(
BufferedImageLuminanceSource::new(image),
let mut binaryMap = BinaryBitmap::new(Rc::new(RefCell::new(GlobalHistogramBinarizer::new(
Box::new(BufferedImageLuminanceSource::new(image)),
))));
let rowNumber = binaryMap.getHeight() as usize / 2;
let row = binaryMap
.getBlackRow(rowNumber, &mut BitArray::new())
.expect("get row");
let row = binaryMap.getBlackRow(rowNumber).expect("get row");
let mut rssExpandedReader = RSSExpandedReader::new();
let theRXingResult = rssExpandedReader

View File

@@ -24,10 +24,10 @@
* http://www.piramidepse.com/
*/
use std::{collections::HashMap, rc::Rc};
use std::{cell::RefCell, collections::HashMap, rc::Rc};
use crate::{
common::{BitArray, GlobalHistogramBinarizer},
common::GlobalHistogramBinarizer,
oned::{rss::expanded::RSSExpandedReader, OneDReader},
BarcodeFormat, BinaryBitmap, BufferedImageLuminanceSource,
};
@@ -184,13 +184,11 @@ fn assertCorrectImage2string(fileName: &str, expected: &str) {
let path = format!("test_resources/blackbox/rssexpanded-1/{}", fileName);
let image = image::open(path).expect("load image");
let binaryMap = BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(
BufferedImageLuminanceSource::new(image),
let mut binaryMap = BinaryBitmap::new(Rc::new(RefCell::new(GlobalHistogramBinarizer::new(
Box::new(BufferedImageLuminanceSource::new(image)),
))));
let rowNumber = binaryMap.getHeight() / 2;
let row = binaryMap
.getBlackRow(rowNumber, &mut BitArray::new())
.expect("get row");
let row = binaryMap.getBlackRow(rowNumber).expect("get row");
let mut rssExpandedReader = RSSExpandedReader::new();
let result = rssExpandedReader

View File

@@ -24,10 +24,10 @@
* http://www.piramidepse.com/
*/
use std::rc::Rc;
use std::{cell::RefCell, rc::Rc};
use crate::{
common::{BitArray, GlobalHistogramBinarizer},
common::GlobalHistogramBinarizer,
oned::rss::{DataCharacterTrait, FinderPattern},
BinaryBitmap, BufferedImageLuminanceSource,
};
@@ -42,13 +42,11 @@ use super::RSSExpandedReader;
#[test]
fn testFindFinderPatterns() {
let image = readImage("2.png");
let binaryMap = BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(
BufferedImageLuminanceSource::new(image),
let mut binaryMap = BinaryBitmap::new(Rc::new(RefCell::new(GlobalHistogramBinarizer::new(
Box::new(BufferedImageLuminanceSource::new(image)),
))));
let rowNumber = binaryMap.getHeight() as u32 / 2;
let row = binaryMap
.getBlackRow(rowNumber as usize, &mut BitArray::new())
.expect("ok");
let row = binaryMap.getBlackRow(rowNumber as usize).expect("ok");
let mut previousPairs = Vec::new(); //new ArrayList<>();
let mut rssExpandedReader = RSSExpandedReader::new();
@@ -90,13 +88,11 @@ fn testFindFinderPatterns() {
#[test]
fn testRetrieveNextPairPatterns() {
let image = readImage("3.png");
let binaryMap = BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(
BufferedImageLuminanceSource::new(image),
let mut binaryMap = BinaryBitmap::new(Rc::new(RefCell::new(GlobalHistogramBinarizer::new(
Box::new(BufferedImageLuminanceSource::new(image)),
))));
let rowNumber = binaryMap.getHeight() as u32 / 2;
let row = binaryMap
.getBlackRow(rowNumber as usize, &mut BitArray::new())
.expect("create");
let row = binaryMap.getBlackRow(rowNumber as usize).expect("create");
let mut previousPairs = Vec::new(); //new ArrayList<>();
let mut rssExpandedReader = RSSExpandedReader::new();
@@ -120,11 +116,11 @@ fn testRetrieveNextPairPatterns() {
#[test]
fn testDecodeCheckCharacter() {
let image = readImage("3.png");
let binaryMap = BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(
BufferedImageLuminanceSource::new(image.clone()),
let mut binaryMap = BinaryBitmap::new(Rc::new(RefCell::new(GlobalHistogramBinarizer::new(
Box::new(BufferedImageLuminanceSource::new(image.clone())),
))));
let row = binaryMap
.getBlackRow(binaryMap.getHeight() / 2, &mut BitArray::new())
.getBlackRow(binaryMap.getHeight() / 2)
.expect("create");
let startEnd = [145, 243]; //image pixels where the A1 pattern starts (at 124) and ends (at 214)
@@ -148,11 +144,11 @@ fn testDecodeCheckCharacter() {
#[test]
fn testDecodeDataCharacter() {
let image = readImage("3.png");
let binaryMap = BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(
BufferedImageLuminanceSource::new(image.clone()),
let mut binaryMap = BinaryBitmap::new(Rc::new(RefCell::new(GlobalHistogramBinarizer::new(
Box::new(BufferedImageLuminanceSource::new(image.clone())),
))));
let row = binaryMap
.getBlackRow(binaryMap.getHeight() / 2, &mut BitArray::new())
.getBlackRow(binaryMap.getHeight() / 2)
.expect("create");
let startEnd = [145, 243]; //image pixels where the A1 pattern starts (at 124) and ends (at 214)

View File

@@ -179,14 +179,17 @@ impl OneDReader for RSSExpandedReader {
}
}
impl Reader for RSSExpandedReader {
fn decode(&mut self, image: &crate::BinaryBitmap) -> Result<crate::RXingResult, Exceptions> {
fn decode(
&mut self,
image: &mut crate::BinaryBitmap,
) -> Result<crate::RXingResult, Exceptions> {
self.decode_with_hints(image, &HashMap::new())
}
// Note that we don't try rotation without the try harder flag, even if rotation was supported.
fn decode_with_hints(
&mut self,
image: &crate::BinaryBitmap,
image: &mut crate::BinaryBitmap,
hints: &DecodingHintDictionary,
) -> Result<crate::RXingResult, Exceptions> {
if let Ok(res) = self.doDecode(image, hints) {
@@ -194,8 +197,8 @@ impl Reader for RSSExpandedReader {
} else {
let tryHarder = hints.contains_key(&DecodeHintType::TRY_HARDER);
if tryHarder && image.isRotateSupported() {
let rotatedImage = image.rotateCounterClockwise();
let mut result = self.doDecode(&rotatedImage, hints)?;
let mut rotatedImage = image.rotateCounterClockwise();
let mut result = self.doDecode(&mut rotatedImage, hints)?;
// Record that we found it rotated 90 degrees CCW / 270 degrees CW
let metadata = result.getRXingResultMetadata();
let mut orientation = 270;

View File

@@ -24,7 +24,7 @@
* http://www.piramidepse.com/
*/
use crate::{common::BitArray, oned::rss::expanded::ExpandedPair, Exceptions, Reader};
use crate::{oned::rss::expanded::ExpandedPair, Exceptions, Reader};
use super::{test_case_util, RSSExpandedReader};
@@ -36,12 +36,10 @@ use super::{test_case_util, RSSExpandedReader};
fn testDecodingRowByRow() {
let mut rssExpandedReader = RSSExpandedReader::new();
let binaryMap = test_case_util::getBinaryBitmap("1000.png");
let mut binaryMap = test_case_util::getBinaryBitmap("1000.png");
let firstRowNumber = binaryMap.getHeight() / 3;
let firstRow = binaryMap
.getBlackRow(firstRowNumber, &mut BitArray::new())
.expect("get row");
let firstRow = binaryMap.getBlackRow(firstRowNumber).expect("get row");
// let tester = ;
@@ -74,9 +72,7 @@ fn testDecodingRowByRow() {
.getStartEndMut()[1] = 0;
let secondRowNumber = 2 * binaryMap.getHeight() / 3;
let mut secondRow = binaryMap
.getBlackRow(secondRowNumber, &mut BitArray::new())
.expect("get row");
let mut secondRow = binaryMap.getBlackRow(secondRowNumber).expect("get row");
secondRow.reverse();
let totalPairs = rssExpandedReader
@@ -91,8 +87,8 @@ fn testDecodingRowByRow() {
fn testCompleteDecode() {
let mut rssExpandedReader = RSSExpandedReader::new();
let binaryMap = test_case_util::getBinaryBitmap("1000.png");
let mut binaryMap = test_case_util::getBinaryBitmap("1000.png");
let result = rssExpandedReader.decode(&binaryMap).expect("decode");
let result = rssExpandedReader.decode(&mut binaryMap).expect("decode");
assert_eq!("(01)98898765432106(3202)012345(15)991231", result.getText());
}

View File

@@ -24,7 +24,7 @@
* http://www.piramidepse.com/
*/
use std::rc::Rc;
use std::{cell::RefCell, rc::Rc};
use image::DynamicImage;
@@ -40,8 +40,8 @@ fn getBufferedImage(fileName: &str) -> DynamicImage {
pub(crate) fn getBinaryBitmap(fileName: &str) -> BinaryBitmap {
let bufferedImage = getBufferedImage(fileName);
let binaryMap = BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(
BufferedImageLuminanceSource::new(bufferedImage),
let binaryMap = BinaryBitmap::new(Rc::new(RefCell::new(GlobalHistogramBinarizer::new(
Box::new(BufferedImageLuminanceSource::new(bufferedImage)),
))));
binaryMap

View File

@@ -72,14 +72,17 @@ impl OneDReader for RSS14Reader {
}
}
impl Reader for RSS14Reader {
fn decode(&mut self, image: &crate::BinaryBitmap) -> Result<crate::RXingResult, Exceptions> {
fn decode(
&mut self,
image: &mut crate::BinaryBitmap,
) -> Result<crate::RXingResult, Exceptions> {
self.decode_with_hints(image, &HashMap::new())
}
// Note that we don't try rotation without the try harder flag, even if rotation was supported.
fn decode_with_hints(
&mut self,
image: &crate::BinaryBitmap,
image: &mut crate::BinaryBitmap,
hints: &DecodingHintDictionary,
) -> Result<crate::RXingResult, Exceptions> {
if let Ok(res) = self.doDecode(image, hints) {
@@ -87,8 +90,8 @@ impl Reader for RSS14Reader {
} else {
let tryHarder = hints.contains_key(&DecodeHintType::TRY_HARDER);
if tryHarder && image.isRotateSupported() {
let rotatedImage = image.rotateCounterClockwise();
let mut result = self.doDecode(&rotatedImage, hints)?;
let mut rotatedImage = image.rotateCounterClockwise();
let mut result = self.doDecode(&mut rotatedImage, hints)?;
// Record that we found it rotated 90 degrees CCW / 270 degrees CW
let metadata = result.getRXingResultMetadata();
let mut orientation = 270;