From 9752608edd9fa9456b4a1691ba9acd366ecffb87 Mon Sep 17 00:00:00 2001 From: Henry Schimke Date: Sat, 10 Dec 2022 09:47:08 -0600 Subject: [PATCH] upca integration --- src/oned/UPCAReader.java | 90 -------------- src/oned/ean_13_reader.rs | 6 + src/oned/mod.rs | 3 + src/oned/upc_a_reader.rs | 113 +++++++++++++++++ tests/UPCABlackBox1TestCase.java | 34 ----- tests/UPCABlackBox2TestCase.java | 34 ----- tests/UPCABlackBox3ReflectiveTestCase.java | 34 ----- tests/UPCABlackBox4TestCase.java | 34 ----- tests/UPCABlackBox5TestCase.java | 34 ----- tests/UPCABlackBox6BlurryTestCase.java | 35 ------ tests/upc_a_blackbox_tests.rs | 137 +++++++++++++++++++++ 11 files changed, 259 insertions(+), 295 deletions(-) delete mode 100644 src/oned/UPCAReader.java create mode 100644 src/oned/upc_a_reader.rs delete mode 100644 tests/UPCABlackBox1TestCase.java delete mode 100644 tests/UPCABlackBox2TestCase.java delete mode 100644 tests/UPCABlackBox3ReflectiveTestCase.java delete mode 100644 tests/UPCABlackBox4TestCase.java delete mode 100644 tests/UPCABlackBox5TestCase.java delete mode 100644 tests/UPCABlackBox6BlurryTestCase.java create mode 100644 tests/upc_a_blackbox_tests.rs diff --git a/src/oned/UPCAReader.java b/src/oned/UPCAReader.java deleted file mode 100644 index 1163b57..0000000 --- a/src/oned/UPCAReader.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.oned; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.BinaryBitmap; -import com.google.zxing.ChecksumException; -import com.google.zxing.DecodeHintType; -import com.google.zxing.FormatException; -import com.google.zxing.NotFoundException; -import com.google.zxing.RXingResult; -import com.google.zxing.common.BitArray; - -import java.util.Map; - -/** - *

Implements decoding of the UPC-A format.

- * - * @author dswitkin@google.com (Daniel Switkin) - * @author Sean Owen - */ -public final class UPCAReader extends UPCEANReader { - - private final UPCEANReader ean13Reader = new EAN13Reader(); - - @Override - public RXingResult decodeRow(int rowNumber, - BitArray row, - int[] startGuardRange, - Map hints) - throws NotFoundException, FormatException, ChecksumException { - return maybeReturnRXingResult(ean13Reader.decodeRow(rowNumber, row, startGuardRange, hints)); - } - - @Override - public RXingResult decodeRow(int rowNumber, BitArray row, Map hints) - throws NotFoundException, FormatException, ChecksumException { - return maybeReturnRXingResult(ean13Reader.decodeRow(rowNumber, row, hints)); - } - - @Override - public RXingResult decode(BinaryBitmap image) throws NotFoundException, FormatException { - return maybeReturnRXingResult(ean13Reader.decode(image)); - } - - @Override - public RXingResult decode(BinaryBitmap image, Map hints) - throws NotFoundException, FormatException { - return maybeReturnRXingResult(ean13Reader.decode(image, hints)); - } - - @Override - BarcodeFormat getBarcodeFormat() { - return BarcodeFormat.UPC_A; - } - - @Override - protected int decodeMiddle(BitArray row, int[] startRange, StringBuilder resultString) - throws NotFoundException { - return ean13Reader.decodeMiddle(row, startRange, resultString); - } - - private static RXingResult maybeReturnRXingResult(RXingResult result) throws FormatException { - String text = result.getText(); - if (text.charAt(0) == '0') { - RXingResult upcaRXingResult = new RXingResult(text.substring(1), null, result.getRXingResultPoints(), BarcodeFormat.UPC_A); - if (result.getRXingResultMetadata() != null) { - upcaRXingResult.putAllMetadata(result.getRXingResultMetadata()); - } - return upcaRXingResult; - } else { - throw FormatException.getFormatInstance(); - } - } - -} diff --git a/src/oned/ean_13_reader.rs b/src/oned/ean_13_reader.rs index 4306f98..3f10136 100644 --- a/src/oned/ean_13_reader.rs +++ b/src/oned/ean_13_reader.rs @@ -157,3 +157,9 @@ impl EAN13Reader { return Err(Exceptions::NotFoundException("".to_owned())); } } + +impl Default for EAN13Reader { + fn default() -> Self { + Self {} + } +} diff --git a/src/oned/mod.rs b/src/oned/mod.rs index 7830f1d..df85e96 100644 --- a/src/oned/mod.rs +++ b/src/oned/mod.rs @@ -40,3 +40,6 @@ pub use ean_8_reader::*; mod ean_13_reader; pub use ean_13_reader::*; + +mod upc_a_reader; +pub use upc_a_reader::*; diff --git a/src/oned/upc_a_reader.rs b/src/oned/upc_a_reader.rs new file mode 100644 index 0000000..f70cd7a --- /dev/null +++ b/src/oned/upc_a_reader.rs @@ -0,0 +1,113 @@ +/* + * Copyright 2008 ZXing authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use crate::{BarcodeFormat, Exceptions, RXingResult, Reader}; + +use super::{EAN13Reader, OneDReader, UPCEANReader}; + +/** + *

Implements decoding of the UPC-A format.

+ * + * @author dswitkin@google.com (Daniel Switkin) + * @author Sean Owen + */ +pub struct UPCAReader(EAN13Reader); + +impl Reader for UPCAReader { + fn decode(&mut self, image: &crate::BinaryBitmap) -> Result { + Self::maybeReturnRXingResult(self.0.decode(image)?) + } + + fn decode_with_hints( + &mut self, + image: &crate::BinaryBitmap, + hints: &crate::DecodingHintDictionary, + ) -> Result { + Self::maybeReturnRXingResult(self.0.decode_with_hints(image, hints)?) + } +} + +impl OneDReader for UPCAReader { + fn decodeRow( + &mut self, + rowNumber: u32, + row: &crate::common::BitArray, + hints: &crate::DecodingHintDictionary, + ) -> Result { + Self::maybeReturnRXingResult(self.0.decodeRow(rowNumber, row, hints)?) + } +} + +impl UPCEANReader for UPCAReader { + fn getBarcodeFormat(&self) -> crate::BarcodeFormat { + BarcodeFormat::UPC_A + } + + fn decodeMiddle( + &self, + row: &crate::common::BitArray, + startRange: &[usize; 2], + resultString: &mut String, + ) -> Result { + self.0.decodeMiddle(row, startRange, resultString) + } + + fn decodeRowWithGuardRange( + &self, + rowNumber: u32, + row: &crate::common::BitArray, + startGuardRange: &[usize; 2], + hints: &crate::DecodingHintDictionary, + ) -> Result + where + Self: Sized, + { + Self::maybeReturnRXingResult(self.0.decodeRowWithGuardRange( + rowNumber, + row, + startGuardRange, + hints, + )?) + } +} + +impl Default for UPCAReader { + fn default() -> Self { + Self(Default::default()) + } +} + +impl UPCAReader { + // private final UPCEANReader ean13Reader = new EAN13Reader(); + + fn maybeReturnRXingResult(result: RXingResult) -> Result { + let text = result.getText(); + if text.chars().nth(0).unwrap() == '0' { + let mut upcaRXingResult = RXingResult::new( + &text[1..], + Vec::new(), + result.getRXingResultPoints().to_vec(), + BarcodeFormat::UPC_A, + ); + // if result.getRXingResultMetadata() != null { + upcaRXingResult.putAllMetadata(result.getRXingResultMetadata().clone()); + // } + Ok(upcaRXingResult) + } else { + Err(Exceptions::NotFoundException("".to_owned())) + } + } +} diff --git a/tests/UPCABlackBox1TestCase.java b/tests/UPCABlackBox1TestCase.java deleted file mode 100644 index 51945ce..0000000 --- a/tests/UPCABlackBox1TestCase.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.oned; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.MultiFormatReader; -import com.google.zxing.common.AbstractBlackBoxTestCase; - -/** - * @author Sean Owen - */ -public final class UPCABlackBox1TestCase extends AbstractBlackBoxTestCase { - - public UPCABlackBox1TestCase() { - super("src/test/resources/blackbox/upca-1", new MultiFormatReader(), BarcodeFormat.UPC_A); - addTest(14, 18, 0, 1, 0.0f); - addTest(16, 18, 0, 1, 180.0f); - } - -} \ No newline at end of file diff --git a/tests/UPCABlackBox2TestCase.java b/tests/UPCABlackBox2TestCase.java deleted file mode 100644 index b6414df..0000000 --- a/tests/UPCABlackBox2TestCase.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.oned; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.MultiFormatReader; -import com.google.zxing.common.AbstractBlackBoxTestCase; - -/** - * @author dswitkin@google.com (Daniel Switkin) - */ -public final class UPCABlackBox2TestCase extends AbstractBlackBoxTestCase { - - public UPCABlackBox2TestCase() { - super("src/test/resources/blackbox/upca-2", new MultiFormatReader(), BarcodeFormat.UPC_A); - addTest(28, 36, 0, 2, 0.0f); - addTest(29, 36, 0, 2, 180.0f); - } - -} diff --git a/tests/UPCABlackBox3ReflectiveTestCase.java b/tests/UPCABlackBox3ReflectiveTestCase.java deleted file mode 100644 index 4b9a745..0000000 --- a/tests/UPCABlackBox3ReflectiveTestCase.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.oned; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.MultiFormatReader; -import com.google.zxing.common.AbstractBlackBoxTestCase; - -/** - * @author dswitkin@google.com (Daniel Switkin) - */ -public final class UPCABlackBox3ReflectiveTestCase extends AbstractBlackBoxTestCase { - - public UPCABlackBox3ReflectiveTestCase() { - super("src/test/resources/blackbox/upca-3", new MultiFormatReader(), BarcodeFormat.UPC_A); - addTest(7, 9, 0, 2, 0.0f); - addTest(8, 9, 0, 2, 180.0f); - } - -} diff --git a/tests/UPCABlackBox4TestCase.java b/tests/UPCABlackBox4TestCase.java deleted file mode 100644 index 5642dc7..0000000 --- a/tests/UPCABlackBox4TestCase.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.oned; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.MultiFormatReader; -import com.google.zxing.common.AbstractBlackBoxTestCase; - -/** - * @author dswitkin@google.com (Daniel Switkin) - */ -public final class UPCABlackBox4TestCase extends AbstractBlackBoxTestCase { - - public UPCABlackBox4TestCase() { - super("src/test/resources/blackbox/upca-4", new MultiFormatReader(), BarcodeFormat.UPC_A); - addTest(9, 11, 0, 1, 0.0f); - addTest(9, 11, 0, 1, 180.0f); - } - -} diff --git a/tests/UPCABlackBox5TestCase.java b/tests/UPCABlackBox5TestCase.java deleted file mode 100644 index 8ae95ea..0000000 --- a/tests/UPCABlackBox5TestCase.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.oned; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.MultiFormatReader; -import com.google.zxing.common.AbstractBlackBoxTestCase; - -/** - * @author dswitkin@google.com (Daniel Switkin) - */ -public final class UPCABlackBox5TestCase extends AbstractBlackBoxTestCase { - - public UPCABlackBox5TestCase() { - super("src/test/resources/blackbox/upca-5", new MultiFormatReader(), BarcodeFormat.UPC_A); - addTest(20, 23, 0, 0, 0.0f); - addTest(22, 23, 0, 0, 180.0f); - } - -} diff --git a/tests/UPCABlackBox6BlurryTestCase.java b/tests/UPCABlackBox6BlurryTestCase.java deleted file mode 100644 index 6e5690f..0000000 --- a/tests/UPCABlackBox6BlurryTestCase.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.oned; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.MultiFormatReader; -import com.google.zxing.common.AbstractBlackBoxTestCase; - -/** - * A set of blurry images taken with a fixed-focus device. - * @author dswitkin@google.com (Daniel Switkin) - */ -public final class UPCABlackBox6BlurryTestCase extends AbstractBlackBoxTestCase { - - public UPCABlackBox6BlurryTestCase() { - super("src/test/resources/blackbox/upca-6", new MultiFormatReader(), BarcodeFormat.UPC_A); - addTest(0, 0, 0.0f); - addTest(0, 0, 180.0f); - } - -} diff --git a/tests/upc_a_blackbox_tests.rs b/tests/upc_a_blackbox_tests.rs new file mode 100644 index 0000000..465801e --- /dev/null +++ b/tests/upc_a_blackbox_tests.rs @@ -0,0 +1,137 @@ +/* + * Copyright 2008 ZXing authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use rxing::{ + oned::{EAN13Reader, UPCAReader}, + BarcodeFormat, MultiFormatReader, +}; + +mod common; + +/** + * @author Sean Owen + */ +#[test] +fn upcablack_box1_test_case() { + let mut tester = common::AbstractBlackBoxTestCase::new( + "test_resources/blackbox/upca-1", + // MultiFormatReader::default(), + UPCAReader::default(), + BarcodeFormat::UPC_A, + ); + + // super("src/test/resources/blackbox/upca-1", new MultiFormatReader(), BarcodeFormat.UPC_A); + tester.add_test_complex(14, 18, 0, 1, 0.0); + tester.add_test_complex(16, 18, 0, 1, 180.0); + + tester.test_black_box() +} + +/** + * @author dswitkin@google.com (Daniel Switkin) + */ +#[test] +fn upcablack_box2_test_case() { + let mut tester = common::AbstractBlackBoxTestCase::new( + "test_resources/blackbox/upca-2", + // MultiFormatReader::default(), + UPCAReader::default(), + BarcodeFormat::UPC_A, + ); + + // super("src/test/resources/blackbox/upca-2", new MultiFormatReader(), BarcodeFormat.UPC_A); + tester.add_test_complex(28, 36, 0, 2, 0.0); + tester.add_test_complex(29, 36, 0, 2, 180.0); + + tester.test_black_box() +} + +/** + * @author dswitkin@google.com (Daniel Switkin) + */ +#[test] +fn upcablack_box3_reflective_test_case() { + let mut tester = common::AbstractBlackBoxTestCase::new( + "test_resources/blackbox/upca-3", + // MultiFormatReader::default(), + UPCAReader::default(), + BarcodeFormat::UPC_A, + ); + + // super("src/test/resources/blackbox/upca-3", new MultiFormatReader(), BarcodeFormat.UPC_A); + tester.add_test_complex(7, 9, 0, 2, 0.0); + tester.add_test_complex(8, 9, 0, 2, 180.0); + + tester.test_black_box() +} + +/** + * @author dswitkin@google.com (Daniel Switkin) + */ +#[test] +fn upcablack_box4_test_case() { + let mut tester = common::AbstractBlackBoxTestCase::new( + "test_resources/blackbox/upca-4", + // MultiFormatReader::default(), + UPCAReader::default(), + BarcodeFormat::UPC_A, + ); + + // super("src/test/resources/blackbox/upca-4", new MultiFormatReader(), BarcodeFormat.UPC_A); + tester.add_test_complex(9, 11, 0, 1, 0.0); + tester.add_test_complex(9, 11, 0, 1, 180.0); + + tester.test_black_box() +} + +/** + * @author dswitkin@google.com (Daniel Switkin) + */ +#[test] +fn upcablack_box5_test_case() { + let mut tester = common::AbstractBlackBoxTestCase::new( + "test_resources/blackbox/upca-5", + // MultiFormatReader::default(), + UPCAReader::default(), + BarcodeFormat::UPC_A, + ); + + // super("src/test/resources/blackbox/upca-5", new MultiFormatReader(), BarcodeFormat.UPC_A); + tester.add_test_complex(20, 23, 0, 0, 0.0); + tester.add_test_complex(22, 23, 0, 0, 180.0); + + tester.test_black_box() +} + +/** + * A set of blurry images taken with a fixed-focus device. + * @author dswitkin@google.com (Daniel Switkin) + */ +#[test] +fn upcablack_box6_blurry_test_case() { + let mut tester = common::AbstractBlackBoxTestCase::new( + "test_resources/blackbox/upca-6", + // MultiFormatReader::default(), + UPCAReader::default(), + BarcodeFormat::UPC_A, + ); + + // super("src/test/resources/blackbox/upca-6", new MultiFormatReader(), BarcodeFormat.UPC_A); + tester.add_test(0, 0, 0.0); + tester.add_test(0, 0, 180.0); + + tester.test_black_box() +}