- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Eclipse Indigo 上通过以下链接运行唇读代码:https://github.com/sagioto/LipReading/blob/master/lipreading-core/src/main/java/edu/lipreading/vision/NoMoreStickersFeatureExtractor.java
代码是:
package edu.lipreading.vision;
import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;
import static com.googlecode.javacv.cpp.opencv_core.cvCircle;
import static com.googlecode.javacv.cpp.opencv_core.cvClearMemStorage;
import static com.googlecode.javacv.cpp.opencv_core.cvCreateImage;
import static com.googlecode.javacv.cpp.opencv_core.cvGetSeqElem;
import static com.googlecode.javacv.cpp.opencv_core.cvLoad;
import static com.googlecode.javacv.cpp.opencv_core.cvResetImageROI;
import static com.googlecode.javacv.cpp.opencv_core.cvSetImageROI;
import static com.googlecode.javacv.cpp.opencv_core.cvSize;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_COUNTER_CLOCKWISE;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_RGB2GRAY;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvCvtColor;
import static com.googlecode.javacv.cpp.opencv_objdetect.CV_HAAR_FIND_BIGGEST_OBJECT;
import static com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.RealMatrix;
import com.googlecode.javacpp.Loader;
import com.googlecode.javacv.cpp.opencv_core.CvMat;
import com.googlecode.javacv.cpp.opencv_core.CvMemStorage;
import com.googlecode.javacv.cpp.opencv_core.CvPoint;
import com.googlecode.javacv.cpp.opencv_core.CvRect;
import com.googlecode.javacv.cpp.opencv_core.CvScalar;
import com.googlecode.javacv.cpp.opencv_core.CvSeq;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import com.googlecode.javacv.cpp.opencv_objdetect;
import com.googlecode.javacv.cpp.opencv_objdetect.CvHaarClassifierCascade;
import edu.lipreading.Constants;
import edu.lipreading.Utils;
/**
* This FeatureExtractor extracts lip coordinates automatically by identifying user lips.
*/
public class NoMoreStickersFeatureExtractor extends AbstractFeatureExtractor{
private static final int RECT_VERTICAL_JUMP = 10;
private static final int RECT_FRAME_THRESHOLD = 5;
private final ExecutorService executor = Executors.newCachedThreadPool();
private IplImage manipulated;
private CvRect prev = new CvRect();
private CvHaarClassifierCascade classifier;
private CvMemStorage storage;
private int sideConfidence;
private int lowerConfidence;
private int upperConfidence;
private int rectFrameCount = 0;
public List<Integer> getPoints(IplImage grabbed) throws Exception {
int roiFix = grabbed.height() / -32;
sideConfidence = grabbed.width() / 128;
lowerConfidence = grabbed.height() / 128;
upperConfidence = grabbed.width() / 32;
if(manipulated == null)
manipulated = cvCreateImage(cvSize(grabbed.width(), grabbed.height()), IPL_DEPTH_8U, 1);
if(storage == null || classifier == null)
init();
cvClearMemStorage(storage);
cvCvtColor(grabbed, manipulated, CV_RGB2GRAY);
CvSeq mouths = cvHaarDetectObjects(manipulated, classifier, storage, 1.8, 13, CV_HAAR_FIND_BIGGEST_OBJECT);
CvRect r = new CvRect(cvGetSeqElem(mouths, 0));
if(r.isNull()){
return null;
} else if (prev.y() != 0 && rectFrameCount < RECT_FRAME_THRESHOLD){
if (Math.abs(r.y() - prev.y()) > RECT_VERTICAL_JUMP){
CvRect.memcpy(r, prev, prev.sizeof());
rectFrameCount++;
}
} else if (rectFrameCount >= RECT_FRAME_THRESHOLD){
rectFrameCount = 0;
}
CvRect.memcpy(prev, r, r.sizeof());
r.y(r.y() + roiFix);
final int x = r.x(), y = r.y();
cvSetImageROI(grabbed, r);
final CvMat mat = grabbed.asCvMat();
List<Future<int[]>> points = new Vector<Future<int[]>>();
final Future<double[][]> getH = executor.submit(new Callable<double[][]>() {
@Override
public double[][] call() throws Exception {
return getH(mat);
}
});
final Future<double[][]> getL = executor.submit(new Callable<double[][]>() {
@Override
public double[][] call() throws Exception {
return getL(mat);
}
});
final Future<double[][]> getLmini = executor.submit(new Callable<double[][]>() {
@Override
public double[][] call() throws Exception {
return Lmini(getL.get());
}
});
final Future<int[]> getRight = executor.submit(new Callable<int[]>() {
@Override
public int[] call() throws Exception {
return getRight(getL.get(), getLmini.get());
}
});
points.add(getRight);
final Future<int[]> getLeft = executor.submit(new Callable<int[]>() {
@Override
public int[] call() throws Exception {
return getLeft(getL.get(), getLmini.get());
}
});
points.add(getLeft);
final Future<int[]> getUpper = executor.submit(new Callable<int[]>() {
@Override
public int[] call() throws Exception {
return getUpper(getL.get(), getH.get(), getRight.get()[0], getLeft.get()[0]);
}
});
points.add(getUpper);
final Future<int[]> getLower = executor.submit(new Callable<int[]>() {
@Override
public int[] call() throws Exception {
return getLower(getL.get(), getUpper.get()[0]);
}
});
points.add(getLower);
List<Integer> frameCoordinates = new Vector<Integer>();
for (Future<int[]> point : points) {
int coordinateX = point.get()[0] + x, coordinateY = point.get()[1] + y;
frameCoordinates.add(coordinateX);
frameCoordinates.add(coordinateY);
}
cvResetImageROI(grabbed);
//cvRectangle(grabbed, cvPoint(x, y), cvPoint(x+r.width(), y+r.height()), CvScalar.GREEN, 1, CV_AA, 0);
return frameCoordinates;
}
/* public List<Integer> getPointsSingleThreaded(IplImage grabbed) throws Exception {
int roiFix = grabbed.height() / -32;
sideConfidence = grabbed.width() / 128;
lowerConfidence = grabbed.height() / 128;
upperConfidence = grabbed.width() / 32;
if(manipulated == null)
manipulated = cvCreateImage(cvSize(grabbed.width(), grabbed.height()), IPL_DEPTH_8U, 1);
if(storage == null || classifier == null)
init();
cvClearMemStorage(storage);
cvCvtColor(grabbed, manipulated, CV_RGB2GRAY);
CvSeq mouths = cvHaarDetectObjects(manipulated, classifier, storage, 1.8, 13, CV_HAAR_FIND_BIGGEST_OBJECT);
CvRect r = new CvRect(cvGetSeqElem(mouths, 0));
if(r.isNull()){
return null;
} else if (prev.y() != 0 && rectFrameCount < RECT_FRAME_THRESHOLD){
if (Math.abs(r.y() - prev.y()) > RECT_VERTICAL_JUMP){
CvRect.memcpy(r, prev, prev.sizeof());
rectFrameCount++;
}
} else if (rectFrameCount >= RECT_FRAME_THRESHOLD){
rectFrameCount = 0;
}
CvRect.memcpy(prev, r, r.sizeof());
r.y(r.y() + roiFix);
final int x = r.x(), y = r.y();
cvSetImageROI(grabbed, r);
final CvMat mat = grabbed.asCvMat();
List<Integer> frameCoordinates = new Vector<Integer>();
frameCoordinates.add(r.x());
frameCoordinates.add(r.x() + r.width());
frameCoordinates.add(r.y());
frameCoordinates.add(r.y() + r.height());
return frameCoordinates;
double[][] h = getH(mat);
double[][] l = getL(mat);
double[][] lmini = Lmini(l);
int[] right = getRight(l, lmini);
frameCoordinates.add(right[0] + x);
frameCoordinates.add(right[1] + y);
int[] left = getLeft(l, lmini);
frameCoordinates.add(left[0] + x);
frameCoordinates.add(left[1] + y);
int[] upper = getUpper(l, h, right[0], left[0]);
frameCoordinates.add(upper[0] + x);
frameCoordinates.add(upper[1] + y);
int[] lower = getLower(l, upper[0]);
frameCoordinates.add(lower[0] + x);
frameCoordinates.add(lower[1] + y);
cvResetImageROI(grabbed);
//cvRectangle(grabbed, cvPoint(x, y), cvPoint(x+r.width(), y+r.height()), CvScalar.GREEN, 1, CV_AA, 0);
return frameCoordinates;
}*/
private void init() throws Exception {
Loader.load(opencv_objdetect.class);
String fileNameFromUrl = Utils.getFileNameFromUrl(Constants.HAAR_CASCADE_MOUTH_FILE);
if(!new File(fileNameFromUrl).exists())
Utils.get(Constants.HAAR_CASCADE_MOUTH_FILE);
classifier = new CvHaarClassifierCascade(cvLoad(Utils.getFileNameFromUrl(fileNameFromUrl)));
storage = CvMemStorage.create();
}
@Override
public void paintCoordinates(IplImage grabbed,
List<Integer> frameCoordinates) {
if(frameCoordinates != null){
for (int i = 0; i < frameCoordinates.size(); i += 2) {
cvCircle(grabbed,
new CvPoint(frameCoordinates.get(i),
frameCoordinates.get(i + 1)),
1, CvScalar.GREEN, 3, 0, 0);
}
}
}
protected int[] getLower(double[][] L, int centerLine) {
RealMatrix matrixL = new Array2DRowRealMatrix(L);
double[] column = matrixL.getColumn(centerLine);
for (int i = column.length - 1; i >= 0; i--) {
boolean found = true;
for (int j = i; j > Math.max(i - lowerConfidence, 0) && found; j--) {
found &= column[j] < column[j - 1];
}
if(found)
return new int[] {centerLine, i};
}
return new int []{centerLine,column.length * 3 / 4};
}
protected int[] getUpper(double[][] L, double[][] h, int right, int left) {
RealMatrix matrixL = new Array2DRowRealMatrix(L);
RealMatrix matrixH = new Array2DRowRealMatrix(h);
RealMatrix hMinusL = matrixH.subtract(matrixL);
int centerLine = (int)Math.round((double)(right + left) / 2);
double[] column = hMinusL.getColumn(centerLine);
// find first getting up
boolean found = false;
int y = 0;
for(int i = 0; i < column.length - 1 && !found; i++){
if(column[i] <= column[i + 1]){
y = i;
found = true;
for (int j = i + 2; j < Math.min(column.length, i + upperConfidence) && found; j++){
found &= column[i] < column[j];
}
}
}
return new int[]{centerLine, y};
}
/**
* @param roi a matrix of the roi pixels arranged as BGR
* @return the Hue matrix
*/
private double[][] getH(CvMat roi){
double[][] h = new double[roi.rows()][roi.cols()];
double max = Double.MIN_VALUE;
for (int i = 0; i < roi.rows(); i++) {
for (int j = 0; j < roi.cols(); j++) {
double R = roi.get(i, j , 2), G = roi.get(i, j , 1);
//h = R / (G + R)
h[i][j] = R / (G + R);
max = Math.max(max, h[i][j]);
}
}
//scale values to be between 0 - 1
for (int i = 0; i < roi.rows(); i++) {
for (int j = 0; j < roi.cols(); j++) {
h[i][j] /= max;
}
}
return h;
}
/**
* @param roi a matrix of the roi pixels arranged as BGR
* @return the luminance matrix
*/
private double[][] getL(CvMat roi){
double[][] L = new double[roi.rows()][roi.cols()];
double max = Double.MIN_VALUE;
for (int i = 0; i < roi.rows(); i++) {
for (int j = 0; j < roi.cols(); j++) {
//L = (R + R + B + G + G + G) / 6
double R = roi.get(i, j , 2), G = roi.get(i, j , 1), B = roi.get(i, j , 0);
L[i][j] = (R + R + B + G + G + G) / 6;
max = Math.max(max, L[i][j]);
}
}
//scale values to be between 0 - 1
for (int i = 0; i < roi.rows(); i++) {
for (int j = 0; j < roi.cols(); j++) {
L[i][j] /= max;
}
}
return L;
}
/**
* @param L the luminance matrix
* @return both the Lmini line in 0 index and in [1][0] the mean luminance of Lmini
*/
private double[][] Lmini(double [][] L){
RealMatrix l = new Array2DRowRealMatrix(L);
double[][] Lmini = new double[2][L[0].length];
for (int i = 0; i < L[0].length; i++) {
double[] column = l.getColumn(i);
int minIndex = Utils.getMinIndex(column, false);
Lmini[0][i] = minIndex;
Lmini[1][0] += column[minIndex];
}
Lmini[1][0] /= L[0].length;
return Lmini;
}
private int[] getRight(double[][] L, double[][] Lmini){
final int[] ans = new int[2];
final double meanL = Lmini[1][0];
for (int i = Lmini[0].length - 1; i >= 0; i--) {
if(L[(int)Lmini[0][i]][i] < meanL){
boolean found = true;
for (int j = i; j > Math.max(i - sideConfidence, 0) && found; j--) {
found &= L[(int)Lmini[0][j]][j] < meanL;
}
if(found)
return new int[] {i, (int)Lmini[0][i]};
}
}
return ans;
}
private int[] getLeft(double[][] L, double[][] Lmini){
final int[] ans = new int[2];
final double meanL = Lmini[1][0];
for (int i = 0; i < Lmini[0].length; i++) {
if(L[(int)Lmini[0][i]][i] < meanL){
boolean found = true;
for (int j = i; j < Math.min(i + sideConfidence, Lmini[0].length) && found; j++) {
found &= L[(int)Lmini[0][j]][j] < meanL;
}
if(found)
return new int[] {i, (int)Lmini[0][i]};
}
}
return ans;
}
public void setClassifier(CvHaarClassifierCascade classifier) {
this.classifier = classifier;
}
public void setStorage(CvMemStorage storage) {
this.storage = storage;
}
public void shutdown(){
executor.shutdownNow();
if(storage != null)
storage.release();
}
public static void main(String ... args) throws Exception{
NoMoreStickersFeatureExtractor fe = new NoMoreStickersFeatureExtractor();
//fe.setOutput(true);
fe.extract( null );
fe.shutdown();
}
}
运行时出现以下错误:
Exception in thread "main" java.lang.ExceptionInInitializerError
at main.java.edu.lipreading.vision.NoMoreStickersFeatureExtractor.init(NoMoreStickersFeatureExtractor.java:216)
at main.java.edu.lipreading.vision.NoMoreStickersFeatureExtractor.getPoints(NoMoreStickersFeatureExtractor.java:70)
at main.java.edu.lipreading.vision.AbstractFeatureExtractor.getPoints(AbstractFeatureExtractor.java:82)
at main.java.edu.lipreading.vision.AbstractFeatureExtractor.extract(AbstractFeatureExtractor.java:37)
at main.java.edu.lipreading.vision.NoMoreStickersFeatureExtractor.main(NoMoreStickersFeatureExtractor.java:389)
Caused by: java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Unknown Source)
at java.util.Properties.load0(Unknown Source)
at java.util.Properties.load(Unknown Source)
at main.java.edu.lipreading.Constants.<clinit>(Constants.java:16)
... 5 more
***** VIDEOINPUT LIBRARY - 0.1995 - TFW07 *****
SETUP: Setting up device 0
SETUP: 1.3M HD WebCam
SETUP: Couldn't find preview pin using SmartTee
SETUP: Capture callback set
SETUP: Device is setup and ready to capture.
最佳答案
错误是来自 Constants class 的 NullPointerException在第 16 行。
您可以在该行看到,程序正在尝试加载 lr.properties
文件。
问题可能在于该文件不在您的类路径中。将该文件添加到类路径中以防止出现此错误
关于java - 由 NullPointerException 引起的初始化程序中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21361688/
我是 Spring 新手,这就是我想要做的事情: 我正在使用一个基于 Maven 的库,它有自己的 Spring 上下文和 Autowiring 字段。 它的bean配置文件是src/test/res
我在我的测试脚本中有以下列表初始化: newSequenceCore=["ls", "ns", "*", "cm", "*", "ov", "ov", "ov", "ov", "kd"] (代表要在控
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Class construction with initial values 当我查看 http://en.
我得到了成员变量“objectCount”的限定错误。编译器还返回“ISO C++ 禁止非常量静态成员的类内初始化”。这是主类: #include #include "Tree.h" using n
我有如下所示的a.h class A { public: void doSomething()=0; }; 然后我有如下所示的b.h #include "a.h" class b: publi
我需要解析 Firebase DataSnapshot (一个 JSON 对象)转换成一个数据类,其属性包括 enum 和 list。所以我更喜欢通过传递 DataSnapshot 来手动解析它进入二
我使用 JQuery 一段时间了,我总是使用以下代码来初始化我的 javascript: $(document).ready( function() { // Initalisation logic
这里是 Objective-C 菜鸟。 为什么会这样: NSString *myString = [NSString alloc]; [myString initWithFormat:@"%f", s
我无法让核心数据支持的 NSArrayController 在我的代码中正常工作。下面是我的代码: pageArrayController = [[NSArrayController alloc] i
我对这一切都很陌生,并且无法将其安装到我的后端代码中。它去哪里?在我的页脚下面有我所有的 JS? 比如,这是什么意思: Popup initialization code should be exec
这可能是一个简单的问题,但是嘿,我是初学者。 所以我创建了一个程序来计算一些东西,它目前正在控制台中运行。我决定向其中添加一个用户界面,因此我使用 NetBeans IDE 中的内置功能创建了一个 J
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
据我所知, dependentObservable 在声明时会进行计算。但如果某些值尚不存在怎么办? 例如: var viewModel ={}; var dependentObservable1 =
我正在阅读 POODR 这本书,它使用旧语法进行默认值初始化。我想用新语法实现相同的功能。 class Gear attr_reader :chainring, :cog, :wheel de
我按照 polymer 教程的说明进行操作: https://www.polymer-project.org/3.0/start/install-3-0 (我跳过了可选部分) 但是,在我执行命令“po
很抱歉问到一个非常新手的Kotlin问题,但是我正在努力理解与构造函数和初始化有关的一些东西。 我有这个类和构造函数: class TestCaseBuilder constructor(
假设我们有一个包含 30 列和 30 行的网格。 生命游戏规则简而言之: 一个小区有八个相邻小区 当一个细胞拥有三个存活的相邻细胞时,该细胞就会存活 如果一个细胞恰好有两个或三个活的相邻细胞,那么它就
我是 MQTT 和 Android 开放附件“AOA” 的新手。在阅读教程时,我意识到,在尝试写入 ByteArrayOutputStream 类型的变量之前,应该写入 0 或 0x00首先到该变量。
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
我有一个inotify /内核问题。我正在使用“inotify” Python项目进行观察,但是,我的问题仍然是固有的关于inotify内核实现的核心。 Python inotify项目处理递归ino
我是一名优秀的程序员,十分优秀!