我已将我的项目更新为SDK版本24和Java 8,并遇到了一个奇怪的编码问题.
由于一些奇怪的原因,Android将我的硬编码UTF-8字符串视为Windows-1251,因此文本是乱码.
像这样:
这是我改变的:
compileSdkVersion 24
buildToolsVersion "24.0.2"
compileOptions {
encoding = 'utf-8'
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
如果我恢复到Java 7,一切都还可以.
有任何想法吗?
我对面部检测很感兴趣,我正在尝试将OpenCV用于我的Delphi应用程序.我稍后将使用Google Picasa进行面部识别.我发现了4种不同的基本haar级联用于检测正面:
haarcascade_frontalface_default.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt_tree.xml
Run Code Online (Sandbox Code Playgroud)
"默认"haarcascade给出了太多误报并且根本不好,而'alt','alt2'和'tree'级联似乎产生了相当准确但有时不同的结果.'tree'级联倾向于产生比'alt'和'alt2'更多的假阴性,但也是最少的误报.
问题是这些haarcascade xml文件有两种不同的格式.
首先是这样的:https://github.com/Danukeru/FOUCAM/blob/master/haarcascade_frontalface.xml
第二个是这样的:https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml
如果我没有弄错,第二个被认为是"新"格式,但我的应用程序目前只能理解第一个"旧"格式."新"级联可能更准确,我想尝试一下.
有没有办法将新格式级联转换为旧格式?
或者我如何在我的应用程序中使用它们?
以下是一些代码(来自sites.google.com/site/josejp1/index/OCV.ZIP):
f1 := 'haarcascade_frontalface_alt.xml';
file1 := PChar(f1);
cascade_f := cvLoad(file1,0,0,0);
storage := cvCreateMemStorage(0);
s.width := 40;
s.height := 40;
faces := cvHaarDetectObjects(PCvArr(img), cascade_f, storage, 1.1, 3, 0, s);
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用'新'格式的xml级联文件,我会收到一个错误:
OpenCV GUI Error Handler
---------------------------
Unspecified error (The node does not represent a user object (unknown type?))
in function cvRead, ..\..\cxcore\src\cxpersistence.cpp(5061)
Run Code Online (Sandbox Code Playgroud)
我还没有在Delphi中找到任何带有新C++ API的现成示例,所以我将这个detectMultiScale示例(cvHaarDetectObjects的C++版本)转换为Delphi.它会在尝试加载级联时编译但崩溃.我是C++的新手,所以任何帮助都会受到赞赏.
unit Unit1;
interface …Run Code Online (Sandbox Code Playgroud) delphi opencv image-processing computer-vision face-detection
在下面的一段代码中,使用detach/attach片段而不只是replacing它们有什么意义?
private void showFragment(String tag) {
String oldTag = mSelectedTag;
mSelectedTag = tag;
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
final Fragment oldFragment = fm.findFragmentByTag(oldTag);
final Fragment fragment = fm.findFragmentByTag(tag);
if (oldFragment != null && !tag.equals(oldTag)) {
ft.detach(oldFragment);
}
if (fragment == null) {
ft.replace(R.id.container, getContentFragment(tag), tag);
} else {
if (fragment.isDetached()) {
ft.attach(fragment);
}
}
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能写这样的东西?
private void showFragment(String tag) {
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction …Run Code Online (Sandbox Code Playgroud) 我的简单应用程序使用Jsoup解析站点,将数据发送到OrmLite数据库,然后在ListView中显示此数据.OrmLite数据库中的表具有简单的结构:自动生成的int主键_id和一些String字段(itemId,itemText,itemDate,itemRating).
我逐个添加项目(这是出于教育目的).如果我经常点击"添加"按钮,我会得到重复的条目.有没有办法保证只有唯一的项目(具有唯一的String itemId)将存储在数据库中?