突然,我的 android studio gradle 构建失败,出现未知错误:
java.lang.IllegalStateException: failed to analyze: com.sun.tools.javac.util.ClientCodeException: java.lang.IllegalStateException: node.sym must not be null
Run Code Online (Sandbox Code Playgroud)
我尝试了一切,例如将我的项目恢复到以前的版本并使缓存无效并重新启动,但错误仍然存在我真的不知道发生了什么:
这是我的毕业证书:
ext {
configuration = [
compileVersion: 27,
minSdk : 14,
targetSdk : 25,
version_code : 5,
version_name : "1.0.0"
]
libraries = [
supportVersion: '1.0.0-beta01'
]
}
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
maven {
url 'https://maven.fabric.io/public'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.google.gms:google-services:4.2.0'
classpath "io.realm:realm-gradle-plugin:6.0.1"
classpath 'io.fabric.tools:gradle:1.27.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// classpath "com.android.tools.build:gradle:${buildConfig.gradlePlugin}"
// NOTE: Do not place …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我尝试使用Open CV在特定图像上进行人脸识别,这里我首先训练一个图像,然后在训练该图像后,如果我在该图像上进行人脸识别,则它成功地识别出该训练过的人脸。但是,当我转向同一个人的另一张照片时,识别不起作用。它仅适用于经过训练的图像,所以我的问题是如何纠正它?
更新:我要做的是用户应该从存储中选择一个人的图像,然后在训练了所选图像之后,我想从存储中获取与我训练过的图像相匹配的所有图像。
这是我的活动课:
public class MainActivity extends AppCompatActivity {
private Mat rgba,gray;
private CascadeClassifier classifier;
private MatOfRect faces;
private ArrayList<Mat> images;
private ArrayList<String> imagesLabels;
private Storage local;
ImageView mimage;
Button prev,next;
ArrayList<Integer> imgs;
private int label[] = new int[1];
private double predict[] = new double[1];
Integer pos = 0;
private String[] uniqueLabels;
FaceRecognizer recognize;
private boolean trainfaces() {
if(images.isEmpty())
return false;
List<Mat> imagesMatrix = new ArrayList<>();
for (int i = 0; i < images.size(); i++)
imagesMatrix.add(images.get(i));
Set<String> uniqueLabelsSet = …Run Code Online (Sandbox Code Playgroud) 好的,所以在我的应用程序中,我尝试使用人脸网络模型实现人脸识别,该模型转换为 tflite 平均约为 93 MB,但是该模型最终会增加我的 apk 的大小。所以我正在努力寻找替代方法来处理这个问题
首先我能想到的是以某种方式压缩它,然后在安装应用程序时解压缩
另一种方法是我应该将该模型上传到服务器,并在下载后将其加载到我的应用程序中。但是我似乎不知道如何实现这一点:
默认情况下,face net 允许从 assets 文件夹中实现
var facenet = FaceNet(getAssets());
Run Code Online (Sandbox Code Playgroud)
但是,如果我正在下载该模型,如何将其加载到我的应用程序中?
这是我的脸网初始化代码:
public FaceNet(AssetManager assetManager) throws IOException {
tfliteModel = loadModelFile(assetManager);
tflite = new Interpreter(tfliteModel, tfliteOptions);
imgData = ByteBuffer.allocateDirect(
BATCH_SIZE
* IMAGE_HEIGHT
* IMAGE_WIDTH
* NUM_CHANNELS
* NUM_BYTES_PER_CHANNEL);
imgData.order(ByteOrder.nativeOrder());
}
private MappedByteBuffer loadModelFile(AssetManager assetManager) throws IOException {
AssetFileDescriptor fileDescriptor = assetManager.openFd(MODEL_PATH);
FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
FileChannel fileChannel = inputStream.getChannel();
long startOffset = fileDescriptor.getStartOffset();
long declaredLength = fileDescriptor.getDeclaredLength();
return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength); …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我正在执行两个 for 循环,但是这些 for 循环需要按顺序安排,这里是用例:
有两个 for 循环: 1- ImageStickerslist 2-TextStickerslist
我想要做的是在 imagestickerslist 之后,如果正确完成,那么 textstickerslist 才会被执行。
这里的 imagesticker 列表由 url 路径组成,用于从 glide 加载图像,但是如果这些图像具有高分辨率,即使图像尚未从 url 加载,它最终也会使线程继续。为了解决这个问题,尝试添加阻塞调用以在ready和full方法上滑动,但事实证明它没有任何帮助。我很困惑阻塞调用是如何工作的,任何帮助都会非常感激。
这是我执行 for 循环的代码:
runBlocking {
launch {
imagestickers.forEach {
runBlocking {
var image = it.path
var x = it.x
var y = it.y
image!!.log()
setimagestickers(image!!, x!!, y!!, it.width!!, it.height!!)
}
}
}.join()
textstickers.forEach {
runBlocking {
var text = it.text.toString()
var color = it.color
var font = it.font
var size = it.size
var x = …Run Code Online (Sandbox Code Playgroud)