Page MenuHomePhabricator

Transform picture (lossless crop/lossless rotate/lossless blur) within the Commons Android app
Closed, DeclinedPublic

Description

Profile Information

Name - Priyank Shankar
Web Profile - https://www.github.com/shankarpriyank
Resume - https://drive.google.com/file/d/1DlZ7ASVB2bUs4wTOIzImeXHosKFTak8C/view?usp=sharing
Location (country or state) - India
Typical working hours (include your timezone) - 7 pm to 2 am IST(UTC+5:30)
You can know more about me through my resume

Synopsis

The Wikimedia Commons is an Android app by the Wikimedia Foundation that allows users to browse and upload pictures to the Wikimedia Commons repository from phones/tablets. Users can select images from the gallery or directly from the camera for an upload. This project aims to add image editing features like lossless crop/lossless rotate/lossless blur to the app. The user will then be able to crop a picture, rotate it by 90/180/270 degrees and blur specific parts of images like faces, number plates, etc for privacy reasons.

GitHub Link of the issue - https://github.com/commons-app/apps-android-commons/issues/1192
Commons Android App Repo - https://github.com/commons-app/apps-android-commons/

Deliverables

To be implemented

A feature in the app to edit the images - All the editing related work like crop, rotate, blur can be done on a single screen, so there will adding of a new screen in the app. And according to me and as suggested by Vivek Kumar Maskara here it would be the best to link this screen to the Upload Activity
To implement this feature we would need to all the following libraries/dependencies to the project -

Implementation Strategy

As discussed in this thread, we will first load the image in a temporary file(editing the original file may lead to permission issues) and make all the needed operations on it and then upload the temporary file to the Wikimedia Commons server.
There might be slight changes in the final UI of the editing screen, but I am pretty sure that it at the end it will be similar to the screen proposed here -https://github.com/commons-app/apps-android-commons/pull/2542

Flow Chart

image.png (510×1 px, 114 KB)

The blur feature seems the most challenging, as suggested by @Nicolas_Raoul here the approach would be

  1. Split the JPEG image into many 8x8 JPEG images. Zero information is lost in this step.
  2. Blur only the blocks that the users wants to blur.
  3. Put all of the blocks back together. Zero information is lost in this step for non-blurred blocks.
Timeline
PeriodClassificationTasks
May 4 - 28Community Bonding PeriodGet to know the mentors and community, Read the documentation, Familiarize with the app structure, Start to refine the implementation strategy
InformationI will be unavailable from May 15 to17 due to university exams
Week 1 (May 29 - Jun 5)DeliverablesFinalize the UI/UX
SubtaskFinalize the UI/UX
SubtaskAdd the needed dependencies, and check for any problems
SubtaskBlog Post
Week 2 (June 5 - Jun 12)DeliverablesLink the Editing screen to the Upload Activity
SubtaskMake necessary changes to the Upload Activity
SubtaskEnsure that the necessary data is seamlessly passed on to the EditScreen
SubtaskBlog Post
Week 3 (June 12 - Jun 19)DeliverablesInitiate the rotate feature
SubtaskStart working on the rotation feature.
SubtaskFinish the UI of the rotation feature
Week 4 (June 19 - Jun 26)DeliverablesRefine the Rotate Feature
SubtaskStart modifying the images passed by the Upload Activity
SubtaskPass the modified Image back to the Upload Activity
SubtaskBlog Post
Week 5 (June 26 - 3 July)DeliverablesTesting the Rotate Feature
SubtaskExtensively test the new rotation feature with all sorts of images(different file types and different sizes)
SubtaskWrite tests for the feature
Week 6 (July 3 - 10 July)DeliverablesFixing the corner cases of the Rotation
SubtaskAccording to my research, the rotation feature is bound to fail in some cases(for eg - Progressive, Huffman not supported exception), and once we have identified the edge cases we can do the needed fixes and also restrict the user for adding those images on which the feature is bound to fail
SubtaskDo the necessary code changes
SubtaskBlog Post
Week 7 (July 10 - 17 July)Midterm EvaluationsInitiate the Crop feature
SubtaskStart working on the Crop Feature
SubtaskFinish the UI of the Crop Feature
SubtaskMidterm Evaluations
Week 8 (July 17 - 24 July)DeliverablesRefining the Crop Feature
SubtaskStart applying the crop operation of the image
SubtaskPass the image back to the Upload Activity
SubtaskBlog Post
Week 9(July 24- 31 July)DeliverablesTesting the Crop Feature
SubtaskExtensively test the new crop feature with all sorts of images(different file types and different sizes)
SubtaskWrite tests for the crop feature.
Week 10(July 31- 7 August)DeliverablesFixing the corner cases of the Crop Feature
SubtaskThe crop feature is also bound to fail in quite a few scenarios. Once we have identified all those cases we can prevent those operation from happening
SubtaskDo all the necessary changes needed
SubtaskBlog Post
Week 11(7 August- 14 August)Buffer PeriodI plan to keep one week as buffer period. Some merge conflicts may come up which may take some time to resolve
SubtaskMerge the crop and rotate feature in the main branch
SubtaskIf everything goes without any hiccups, I can start working on the blur feature during this time
Week 12( 14 August- 21 August)DeliverablesStart working on the blur feature
SubtaskFinalize the approach to take to implement the blur feature
SubtaskImplement the UI for the Blur feature
Week 13(21 August- 28 August)Final EvaluationsRefining the blur feature
SubtaskFinal report
SubtaskStart breaking down the image into smaller pieces
SubtaskBlurring the pieces selected by the user

Participation

I am willing to communicate using any way that is recommended by the mentors. But overall, I think we can communicate well using GitHub issues, Comment sections of pull request in Github, Zulip, Google Meet.

About Me

  • Education - B.Tech (2020 -2024)
  • University - Jaypee University Of Engineering and Technology, Guna
  • How did you hear about this program? - I initially came to know about this program through Twitter
  • During the community bonding I will have my university exams, after that my classes will resume in August(exact dates not decided yet)
  • I am only eligible for Google Summer Of Code
  • What does making this project happen mean to you? - Completing this project would mean a lot to me. I am a big supporter and promoter of Open Source and completing this project will enhance the experience of the Commons Android App and also encourage more people to use the app, which will give me an immense sense of satisfaction and pride

Past Experience

Contributions To Commons App
Pull Requests
PRTitleStatus
#5185Fix Misleading warning title for duplicate file nameMerged
#5186Bug fix "Author field shows HTML tags when template used"Open
#5188Enable support toolbar for ProfileActivityMerged
Issues
IssueTitleStatus
#5187App crashes when you click on Author NameOpen
#5198Add a linter to the projectOpen
  • I have been developing android apps for about 3 years now. I have made a lot of personal projects, all of which can be found here. Some of the projects which I feel are worth mentioning are
    • DocDelivery - DocDelivery is a package/shipment tracking application that helps the user track their incoming packages/shipments easily. Learned a lot about Clean Architecture, MVVM, Jetpack Compose, data caching and parsing, Dependency Injection, asynchronous programming using coroutines and flows, etc . More details can be found in the development wiki
    • Petty Planet - Petty planet is a place where you can upload pics of abandoned pets so that the people interested in adopting pets can connect to adopt the pets they wish to adopt. Learned a lot about MVVM, firebase storage, firebase real-time database, camera and file explorer in android etc.
    • Imguram - Imugram as you may have guessed is basically an Instagram clone where you can scroll through the hot and top feed and also view stories. Learnt a lot about API calling, testing, Retrofit,Coil, MVVM etc
  • Describe any open source projects you have contributed to as a user and contributor (include links).
    • I contributed to Organic Maps as a GSoC 22 mentee, I worked on adding the support for Android Auto in the app of Organic Maps. More info about my work can be found here.
    • I have also contributed to Oppia, list of my contributions can be found here
    • I have recently started contributing to Kiwix in my free time, you can see my first pr here
  • I have also worked as an android developer intern with a couple of startups and gained some invaluable experience, you can know more about them in my resume

Any Other Info

I made a POC app to test rotations and cropping of images using the library mentioned above, it's not comprehensive but you can still have a look at it here

Event Timeline

PriyankShankar renamed this task from Insert project title here to Transform picture (crop/rotate/blur) within the app.Mar 19 2023, 4:48 PM
PriyankShankar claimed this task.
Aklapper renamed this task from Transform picture (crop/rotate/blur) within the app to Transform picture (crop/rotate/blur) within the Commons Android app.Mar 19 2023, 5:17 PM

Hi @Aklapper, by when should I expect the first feedback from the mentors?

Hi, please ask general questions in Zulip instead. Thanks!

@Nicolas_Raoul @Kaartic This is the first draft of my proposal. Could you please take a look and give me some feedback or suggestions? Thanks!

Hi Priyank,
Big apologies for the delay, I was on a trip for 5 days.
Could you please include the word "lossless" for all transformations? Lossless rotation, lossless crop, lossless blur. Please add a sentence to explain the last one as the wording is surprising at first.
Also, please link to your merged pull request(s).
Otherwise the proposal looks good!

PriyankShankar renamed this task from Transform picture (crop/rotate/blur) within the Commons Android app to Transform picture (lossless crop/lossless rotate/lossless blur) within the Commons Android app.Mar 22 2023, 11:12 AM
PriyankShankar updated the task description. (Show Details)

Hey @Nicolas_Raoul, No worries about the delay!
I have added the word "lossless" at all suitable places. And I also added a sentence explaining the features.
Unfortunately, I have not raised any pr's to the commons app repository. And I plan to spend the time left before the project starting period researching the transformations topic and especially the blur transformation. Cause as I am working on the POC app I am discovering quite a few rough patches(and their fixes) with the library. Please let me know if that sounds good or if that's a problem.

Unfortunately, I have not raised any pr's to the commons app repository.

Hi Priyank, as mentioned in our instructions to apply for GSoC, you would need to fix at least 1 bug so that you could demonstrate that you could work with the app. So, it would be great if you could follow the instructions in the developer guide and fix a bug as suggested in it.

I just noticed you've raised an MR. That's great. Next time, make sure to check once before choosing to work on an issue. :-) Also, I would encourage you to work on other bugs too if you find the time.

I'll take a look at your proposal soon and give my feedback (if any).

Hey @Kaartic, Thanks for informing me about this. Also I just raised another pr ,actualIy have been involved in some communities which prefer people directly fixing issues rather than getting assigned first, but I am sorry and be assured that I will keep this in mind from now and check once with the maintainers before choosing to work on an issue.
Also @Kaartic I can find some time to fix some bugs here and there, but to solve some complex issues I will need to devote more time and that would most probably mean that I will have to cut some time from working on identifying issues and problem that can come up while working on the transformations. I would love to know your suggestion on what would be the best to do so that my chances of getting selected are maximized.

Also, I will be waiting for your feedback(or views about the proposal) :-)

@Nicolas_Raoul can you please review the proposal once again, I have added some extra details.
And @Kaartic only 1 week is left before the deadline, I hope you can review the proposal soon so that I can make the changes needed in time

Hi Priyank! Sorry about the delay. I'm out of station on a commitment and hence finding lesser available time than usual for this week.

I took a look at the proposal and it looks good. Just had a few points regarding it:

  • Have you explored whether it would be possible to use a single library in order to achieve the various transformations? Excuse me if I missed any existing discussion on #1192 regarding this. I haven't been able to fully go through it.
  • The libraries which you suggest MediaUtil and Android-Image-Cropper perceivably seem stale / unmaintained now. Could you see if there are better alternatives for them ? Do correct me if I got anything wrong.

Its good to see that you've already started working on PRs. If at all you find some time and feel motivated to do so, see if you could help with reviewing some PRs. That might give you some interesting exposure / perspectives. Don't feel compelled to do it, though :-)

Hey @Kaartic, No worries about the delay.
Regarding the libraries

  • The MediaUtil is a pretty standard library and has been around for quite some time, I would say the project/library has matured that's why there is no ongoing development. And yes actually, there is no need for another library to implement the crop feature( I tried to crop some images using MediaUtil in the POC app that I made and it was working fine), we can crop images using MediaUtil itself. I have updated the proposal accordingly( just removed the extra library). But for the blur feature, we will need the mentioned library

Reviewing some PRs sounds interesting I will try to review some of them.

Is there absolutely anything else that I can improve?

Hi @PriyankShankar, as the deadline for GSoC is quickly approaching in less than 48 hours (April 4th, 2023, 18:00 UTC), it's crucial that you submit your proposal on Phabricator and Google's program website in the recommended format as soon as possible. To avoid any potential last-minute rushes or server failures, we highly recommend that you submit your proposal early and keep updating it as needed before the deadline. Once you have submitted your proposal, please move it from the "Proposals in Progress" column to the "Proposals Submitted" column on the Phabricator workboard by simply dragging it. If you have any inquiries, please do not hesitate to ask. Good luck with your application!

Hey @Gopavasanth I copy pasted the content of this proposal (on Phabricator) into a new google doc, and then made the necessary formatting changes, and then uploaded that file in pdf format on the Google's Program Website.
I just wanted to confirm once if this sounds good, cause somewhere or the other I heard that contributors can also upload the pdf generated while trying to print the Phabricator proposal.

Really sorry for bugging you again @Nicolas_Raoul and @Kaartic, there is not much time left before the deadline, are there any there last minute that I can make? Any way I can make this proposal better?

@PriyankShankar We are sorry to say that we could not allocate a slot for you this time. Please do not consider the rejection to be an assessment of your proposal. We received over 100 quality applications, and we could only accept 9 applicants. We were not able to give all applicants a slot that would have deserved one, and these were some very tough decisions to make. Please know that you are still a valued member of our community and we by no means want to exclude you. Many applicants who we did not accept in previous rounds have become Wikimedia maintainers, contractors and even GSoC students and mentors this year!

Your ideas and contributions to our projects are still welcome! As a next step, you could consider finishing up any pending pull requests or inform us that someone has to take them over. Here is the recommended place for you to get started as a newcomer: https://www.mediawiki.org/wiki/New_Developers.

If you would still be eligible for GSoC next year, we look forward to your participation!